{"id":"b3dd0355-3417-405c-ac76-231431252f9a","shortId":"XWRhSB","kind":"skill","title":"chanjing-customised-person","tagline":">-","description":"# Chanjing Customised Person\n\n## 功能说明\n\n从本机**上传源视频**创建蝉镜**定制数字人**，并支持列表、查询、轮询与删除；流程与 Open API 一致：**获取上传 URL**（`create_upload_url`）→ 对返回的 `sign_url` 发起 **`PUT`** 上传正文 → **创建/列出/获取/轮询/删除**。仅使用蝉镜 Open API 与接口返回的上传端点，**不**引入其它云厂商凭证。脚本**不**依赖 ffmpeg/ffprobe。环境变量**均可选**（默认 `~/.chanjing` 与官方 API 基址）。凭据、令牌持久化、网络边界见 **`manifest.yaml`**。\n\n## 运行依赖\n\n- **python3** 与同仓库 `scripts/*.py`；可读本地视频文件路径并上传\n\n## 环境变量与机器可读声明\n\n- 环境变量键名与说明：**`manifest.yaml`**（`environment` 段）及本文\n- 变量键名、凭据模型、合规 **`permissions`**、**`clientPermissions`、`agentPolicy`**：**`manifest.yaml`**\n\n## 使用命令\n\n- **ClawHub**（slug 以注册表为准）：`clawhub run chanjing-customised-person`\n- **本仓库**：`python skills/chanjing-customised-person/scripts/create_person.py …`（见 **Standard Workflow**）\n\n---\n\n## 登记与审稿（单一事实来源）\n\n英文登记、主凭据、`primaryEnv` 省略、可选 env、敏感字段与出站边界：**以同目录 `manifest.yaml` 为准**（与 **`credential_hint`**、**`description` frontmatter** 一致）。本篇从 **When to Use** 起写业务能力与流程，**勿与 `manifest.yaml` 重复维护长篇对表**。\n\n## When to Use This Skill\n\n当用户要做这些事时使用本 Skill：\n\n* 上传真人源视频，创建蝉镜定制数字人\n* 查询定制数字人列表或单个形象详情\n* 轮询定制数字人制作进度\n* 删除不再需要的定制数字人\n\n如果需求是“拿已有数字人去合成口播视频”，优先使用 `chanjing-video-compose`。  \n如果需求是“上传真人视频做对口型驱动”，优先使用 `chanjing-avatar`。\n\n## Preconditions\n\n执行本 Skill 前，必须先通过 `chanjing-credentials-guard` 完成 AK/SK 与 Token 校验。\n\n本 Skill 与 guard 共用：\n\n* `~/.chanjing/credentials.json`\n* `https://open-api.chanjing.cc`\n\n无凭证时，脚本会自动打开蝉镜登录页，并提示配置命令。\n\n### 审阅与安全（凭据与边界）\n\n与 **Purpose / Credentials / Persistence / Network** 相关的逐项说明见 **`manifest.yaml`**（含 **`permissions.network_mode: open`** 与 **`signUrlPutNote`**）。以下仅 **SKILL 正文补充**：\n\n- **`credentials.json`**：脚本会读取本地凭据；刷新后的 **`access_token` / `expire_in` 写回同一文件**为**预期行为**。须限制目录/文件权限（如目录 `0700`、文件 `0600`），并**确保永不提交版本库**（见 manifest **`doNotCommitToVcs`**）。\n- **`sign_url` 与 PUT 主机**：`upload_file.py` / `get_upload_url.py` 先请求 `open-api.chanjing.cc` 的 `create_upload_url`，再向响应中的 **`sign_url` 发起 HTTPS PUT**；该 URL 的主机常为蝉镜侧对象存储或 CDN，**可能不在**固定主机白名单中，清单中已改为 **`network_mode: open`** 以如实声明。\n- **`create_person.py --callback`**：若传入 URL，远程服务可能向该端点 **POST** 任务结果，载荷可能含状态与资源引用等**敏感信息**；须自行信任该端点并承担出站与数据暴露风险。\n- **本地视频**：仅按用户给出的路径读取视频字节并上传到 API 指定端点；不扫描其它无关系统路径。\n\n## Standard Workflow\n\n1. 上传本地源视频，获取 `file_id`（推荐 `upload_file.py`：内部为 **`GET …/create_upload_url` → `PUT sign_url`（正文为文件）→ 轮询 `file_detail` 至就绪**；亦可分步用 `get_upload_url.py` + 自行 PUT + 轮询）\n2. 调用 `create_person.py` 创建定制数字人任务，得到 `person_id`\n3. 调用 `poll_person.py` 轮询直到成功，得到 `preview_url`，或用 `get_person --field audio_man_id` 拿到声音 id\n4. 如需批量查看历史形象，用 `list_persons.py`\n5. 如需清理资源，用 `delete_person.py`\n\n## Covered APIs\n\n本 Skill 当前覆盖：\n\n* `GET /open/v1/common/create_upload_url`\n* `GET /open/v1/common/file_detail`\n* `POST /open/v1/create_customised_person`\n* `POST /open/v1/list_customised_person`\n* `GET /open/v1/customised_person`\n* `POST /open/v1/delete_customised_person`\n\n## Scripts\n\n脚本目录：\n\n* `skills/chanjing-customised-person/scripts/`\n\n| 脚本 | 说明 |\n|------|------|\n| `_auth.py` | 读取凭证、获取或刷新 `access_token` |\n| `get_upload_url.py` | 调用 `create_upload_url`，输出 `sign_url`、`mime_type`、`file_id` 等 JSON（需自行 PUT） |\n| `upload_file.py` | `create_upload_url` + **HTTPS PUT `sign_url`** + 轮询 `file_detail`，输出 `file_id` |\n| `create_person.py` | 创建定制数字人任务，输出 `person_id`；可选 **`--callback`**（服务端可能向该 URL **POST** 敏感任务载荷） |\n| `list_persons.py` | 列出定制数字人形象 |\n| `get_person.py` | 获取单个数字人详情，默认输出 JSON |\n| `poll_person.py` | 轮询形象详情直到完成，默认输出 `preview_url` |\n| `delete_person.py` | 删除定制数字人，输出被删除的 `person_id` |\n\n## Usage Examples\n\n示例 1：从本地视频创建定制数字人\n\n```bash\nFILE_ID=$(python3 skills/chanjing-customised-person/scripts/upload_file.py \\\n  --file ./source.mp4)\n\nPERSON_ID=$(python3 skills/chanjing-customised-person/scripts/create_person.py \\\n  --name \"演示数字人\" \\\n  --file-id \"$FILE_ID\" \\\n  --train-type figure)\n\npython3 skills/chanjing-customised-person/scripts/poll_person.py --id \"$PERSON_ID\"\n```\n\n示例 2：查看完整详情\n\n```bash\npython3 skills/chanjing-customised-person/scripts/get_person.py \\\n  --id \"C-ef91f3a6db3144ffb5d6c581ff13c7ec\"\n```\n\n示例 3：列出与删除\n\n```bash\npython3 skills/chanjing-customised-person/scripts/list_persons.py\n\npython3 skills/chanjing-customised-person/scripts/delete_person.py \\\n  --id \"C-ef91f3a6db3144ffb5d6c581ff13c7ec\"\n```\n\n## Output Convention\n\n默认不自动下载任何预览视频或封面图：\n\n* `create_person.py` 输出 `person_id`\n* `poll_person.py` 输出 `preview_url`，便于继续预览或保存\n* 只有在用户明确要求时，才应把返回的资源 URL 另存到本地\n\n如果后续需要落盘预览资源，建议使用：\n\n* `outputs/customised-person/`\n\n## Additional Resources\n\n更多接口细节与触发样例见：\n\n* `skills/chanjing-customised-person/reference.md`\n* `skills/chanjing-customised-person/examples.md`","tags":["chanjing","customised","person","chan","skills","chanjing-ai","agent-skills","claude-code-skills","openclaw-skills"],"capabilities":["skill","source-chanjing-ai","skill-chanjing-customised-person","topic-agent-skills","topic-claude-code-skills","topic-openclaw-skills","topic-skills"],"categories":["chan-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/chanjing-ai/chan-skills/chanjing-customised-person","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add chanjing-ai/chan-skills","source_repo":"https://github.com/chanjing-ai/chan-skills","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 14 github stars · SKILL.md body (4,481 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T13:03:30.965Z","embedding":null,"createdAt":"2026-04-19T00:40:58.748Z","updatedAt":"2026-04-22T13:03:30.965Z","lastSeenAt":"2026-04-22T13:03:30.965Z","tsv":"'/.chanjing':49 '/.chanjing/credentials.json':162 '/create_upload_url':262 '/open/v1/common/create_upload_url':313 '/open/v1/common/file_detail':315 '/open/v1/create_customised_person':317 '/open/v1/customised_person':321 '/open/v1/delete_customised_person':323 '/open/v1/list_customised_person':319 '/source.mp4':402 '0600':200 '0700':198 '1':253,394 '2':276,424 '3':283,434 '4':299 '5':303 'access':188,332 'addit':464 'agentpolici':74 'ak/sk':153 'api':18,38,51,248,308 'audio':294 'auth.py':329 'avatar':142 'bash':396,426,436 'c':431,443 'c-ef91f3a6db3144ffb5d6c581ff13c7ec':430,442 'callback':237,370 'cdn':228 'chanj':2,5,83,134,141,149 'chanjing-avatar':140 'chanjing-credentials-guard':148 'chanjing-customised-person':1,82 'chanjing-video-compos':133 'clawhub':77,80 'clientpermiss':73 'compos':136 'convent':446 'cover':307 'creat':22,216,336,351 'create_person.py':236,278,364,448 'credenti':105,150,171 'credentials.json':185 'customis':3,6,84 'delete_person.py':306,386 'descript':107 'detail':269,360 'donotcommittovc':205 'ef91f3a6db3144ffb5d6c581ff13c7ec':432,444 'env':99 'environ':66 'exampl':392 'expir':190 'ffmpeg/ffprobe':45 'field':293 'figur':417 'file':256,268,344,359,362,397,401,410,412 'file-id':409 'frontmatt':108 'get':261,291,312,314,320 'get_person.py':377 'get_upload_url.py':212,272,334 'guard':151,160 'hint':106 'https':223,354 'id':257,282,296,298,345,363,368,390,398,404,411,413,420,422,429,441,451 'json':347,380 'list_persons.py':302,375 'man':295 'manifest':204 'manifest.yaml':56,65,75,102,116,175 'mime':342 'mode':178,233 'name':407 'network':173,232 'open':17,37,179,234 'open-api.chanjing.cc':163,214 'output':445 'outputs/customised-person':463 'permiss':72 'permissions.network':177 'persist':172 'person':4,7,85,281,292,367,389,403,421,450 'poll_person.py':285,381,452 'post':241,316,318,322,373 'precondit':143 'preview':288,384,454 'primaryenv':96 'purpos':170 'put':29,209,224,263,274,349,355 'py':61 'python':87 'python3':58,399,405,418,427,437,439 'resourc':465 'run':81 'script':60,324 'sign':26,206,220,264,340,356 'signurlputnot':181 'skill':122,124,145,158,183,310 'skill-chanjing-customised-person' 'skills/chanjing-customised-person/examples.md':468 'skills/chanjing-customised-person/reference.md':467 'skills/chanjing-customised-person/scripts':326 'skills/chanjing-customised-person/scripts/create_person.py':88,406 'skills/chanjing-customised-person/scripts/delete_person.py':440 'skills/chanjing-customised-person/scripts/get_person.py':428 'skills/chanjing-customised-person/scripts/list_persons.py':438 'skills/chanjing-customised-person/scripts/poll_person.py':419 'skills/chanjing-customised-person/scripts/upload_file.py':400 'slug':78 'source-chanjing-ai' 'standard':90,251 'token':155,189,333 'topic-agent-skills' 'topic-claude-code-skills' 'topic-openclaw-skills' 'topic-skills' 'train':415 'train-typ':414 'type':343,416 'upload':23,217,337,352 'upload_file.py':211,259,350 'url':21,24,27,207,218,221,226,239,265,289,338,341,353,357,372,385,455,459 'usag':391 'use':113,120 'video':135 'workflow':91,252 '一致':19,109 '上传本地源视频':254 '上传正文':30 '上传源视频':10 '上传真人源视频':125 '上传真人视频做对口型驱动':138 '不':40,43 '不扫描其它无关系统路径':250 '与':104,154,159,169,180,208 '与同仓库':59 '与官方':50 '与接口返回的上传端点':39 '为':193 '为准':103 '主凭据':95 '主机':210 '亦可分步用':271 '仅使用蝉镜':36 '仅按用户给出的路径读取视频字节并上传到':247 '从本地视频创建定制数字人':395 '从本机':9 '令牌持久化':54 '以下仅':182 '以同目录':101 '以如实声明':235 '以注册表为准':79 '任务结果':242 '优先使用':132,139 '使用命令':76 '依赖':44 '便于继续预览或保存':456 '先请求':213 '共用':161 '内部为':260 '再向响应中的':219 '写回同一文件':192 '凭据':53 '凭据与边界':168 '凭据模型':70 '列出':32 '列出与删除':435 '列出定制数字人形象':376 '创建':31 '创建定制数字人任务':279,365 '创建蝉镜':11 '创建蝉镜定制数字人':126 '删除':35 '删除不再需要的定制数字人':129 '删除定制数字人':387 '刷新后的':187 '前':146 '功能说明':8 '勿与':115 '单一事实来源':93 '及本文':68 '发起':28,222 '变量键名':69 '另存到本地':460 '只有在用户明确要求时':457 '可能不在':229 '可读本地视频文件路径并上传':62 '可选':98,369 '合规':71 '含':176 '固定主机白名单中':230 '均可选':47 '基址':52 '如果后续需要落盘预览资源':461 '如果需求是':130,137 '如目录':197 '如需批量查看历史形象':300 '如需清理资源':304 '完成':152 '定制数字人':12 '审阅与安全':167 '对返回的':25 '并':201 '并提示配置命令':166 '并支持列表':13 '建议使用':462 '引入其它云厂商凭证':41 '当前覆盖':311 '当用户要做这些事时使用本':123 '得到':280,287 '必须先通过':147 '或用':290 '才应把返回的资源':458 '执行本':144 '拿到声音':297 '拿已有数字人去合成口播视频':131 '指定端点':249 '推荐':258 '敏感任务载荷':374 '敏感信息':244 '敏感字段与出站边界':100 '文件':199 '文件权限':196 '无凭证时':164 '更多接口细节与触发样例见':466 '服务端可能向该':371 '本':157,309 '本仓库':86 '本地视频':246 '本篇从':110 '查看完整详情':425 '查询':14 '查询定制数字人列表或单个形象详情':127 '校验':156 '正文为文件':266 '正文补充':184 '段':67 '流程与':16 '清单中已改为':231 '演示数字人':408 '环境变量':46 '环境变量与机器可读声明':63 '环境变量键名与说明':64 '用':301,305 '登记与审稿':92 '的':215 '的主机常为蝉镜侧对象存储或':227 '相关的逐项说明见':174 '省略':97 '确保永不提交版本库':202 '示例':393,423,433 '等':346 '网络边界见':55 '脚本':42,327 '脚本会自动打开蝉镜登录页':165 '脚本会读取本地凭据':186 '脚本目录':325 '自行':273 '至就绪':270 '若传入':238 '英文登记':94 '获取':33,255 '获取上传':20 '获取单个数字人详情':378 '获取或刷新':331 '见':89,203 '该':225 '说明':328 '读取凭证':330 '调用':277,284,335 '起写业务能力与流程':114 '轮询':34,267,275,358 '轮询与删除':15 '轮询定制数字人制作进度':128 '轮询形象详情直到完成':382 '轮询直到成功':286 '载荷可能含状态与资源引用等':243 '输出':339,361,366,449,453 '输出被删除的':388 '运行依赖':57 '远程服务可能向该端点':240 '重复维护长篇对表':117 '需自行':348 '须自行信任该端点并承担出站与数据暴露风险':245 '须限制目录':195 '预期行为':194 '默认':48 '默认不自动下载任何预览视频或封面图':447 '默认输出':379,383","prices":[{"id":"3d6bf6fe-5603-4ea0-83cd-1a0c5920cf55","listingId":"b3dd0355-3417-405c-ac76-231431252f9a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"chanjing-ai","category":"chan-skills","install_from":"skills.sh"},"createdAt":"2026-04-19T00:40:58.748Z"}],"sources":[{"listingId":"b3dd0355-3417-405c-ac76-231431252f9a","source":"github","sourceId":"chanjing-ai/chan-skills/chanjing-customised-person","sourceUrl":"https://github.com/chanjing-ai/chan-skills/tree/main/skills/chanjing-customised-person","isPrimary":false,"firstSeenAt":"2026-04-19T00:40:58.748Z","lastSeenAt":"2026-04-22T13:03:30.965Z"}],"details":{"listingId":"b3dd0355-3417-405c-ac76-231431252f9a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"chanjing-ai","slug":"chanjing-customised-person","github":{"repo":"chanjing-ai/chan-skills","stars":14,"topics":["agent-skills","claude-code-skills","openclaw-skills","skills"],"license":null,"html_url":"https://github.com/chanjing-ai/chan-skills","pushed_at":"2026-03-28T05:19:27Z","description":"蝉系openclaw 技能库，聚焦电商内容创作，提供实用的 AI 工具及技能包","skill_md_sha":"732d98adc81723b51108d03c6b58eb1f5df6546f","skill_md_path":"skills/chanjing-customised-person/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/chanjing-ai/chan-skills/tree/main/skills/chanjing-customised-person"},"layout":"multi","source":"github","category":"chan-skills","frontmatter":{"name":"chanjing-customised-person","description":">-"},"skills_sh_url":"https://skills.sh/chanjing-ai/chan-skills/chanjing-customised-person"},"updatedAt":"2026-04-22T13:03:30.965Z"}}