{"id":"d8408624-16da-4c8f-bb05-75e43f78b499","shortId":"wCh7hn","kind":"skill","title":"chanjing-text-to-digital-person","tagline":">-","description":"# Chanjing Text To Digital Person\n\n## 功能说明\n\n文生图、图生说话视频、可选 **LoRA** 训练与轮询；用户明确要求时下载生成物。凭据与权限见 **`manifest.yaml`**。脚本**不**依赖 ffmpeg/ffprobe。\n\n## 运行依赖\n\n- **python3** 与同仓库 `scripts/*.py`（含 `_auth.py`、`_task_api.py`）\n- **无** ffmpeg/ffprobe 门控\n\n## 环境变量与机器可读声明\n\n- 环境变量键名与说明：**`manifest.yaml`**（`environment` 段）及本文\n- 变量、凭据模型、合规 **`permissions`**、**`clientPermissions`、`agentPolicy`**：**`manifest.yaml`**\n\n## 使用命令\n\n- **ClawHub**（slug 以注册表为准）：`clawhub run chanjing-text-to-digital-person`\n- **本仓库**：`python skills/chanjing-text-to-digital-person/scripts/create_photo_task.py …`（见 **Standard Workflow**）\n\n---\n\n## 登记与审稿（单一事实来源）\n\n路径、`primaryEnv` 省略、**`persistAccessTokenOnDisk`**、敏感字段、**`agentPolicy`**、可选 env 等：**以 `manifest.yaml` 为准**。实现上由 **`_auth.py`**、**`_task_api.py`** 与各 CLI 脚本承担；本篇从 **When to Use** 起写流程。\n\n## When to Use This Skill\n\n当用户要做这些事时使用本 Skill：\n\n* 根据人物提示词生成数字人形象图\n* 把生成的人物图转成会说话的短视频\n* 查询文生图 / 图生视频 / LoRA 任务状态\n* 在用户明确要求时，把生成图片或视频下载到本地\n\n如果需求是“上传真人素材训练定制数字人”，优先使用 `chanjing-customised-person`。  \n如果需求是“拿已有数字人做口播视频合成”，优先使用 `chanjing-video-compose`。\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无凭证时，脚本会自动打开蝉镜登录页（若同仓库存在则执行 **`chanjing-credentials-guard/scripts/open_login_page.py`**，否则 **`webbrowser.open`**），并提示本地执行 **`chanjing_config.py`**。\n\n### 审阅与安全（凭据）\n\n与 **Purpose / Credentials / Persistence** 相关的逐项说明见 **`manifest.yaml`**（缺凭证时可能子进程调用 guard 的 **`open_login_page.py`** 等行为见 **`clientPermissions`**）。\n\n## Standard Workflow\n\n主流程通常分两段，且都是异步任务：\n\n1. 调用 `create_photo_task.py` 创建文生图任务，得到 `photo_unique_id`\n2. 调用 `poll_photo_task.py` 轮询到成功，选一张 `photo_path`\n3. 调用 `create_motion_task.py` 创建图生视频任务，得到 `motion_unique_id`\n4. 调用 `poll_motion_task.py` 轮询到成功，得到最终 `video_url`\n5. 只有在用户明确要求保存到本地时，才调用 `download_result.py`\n\n可选扩展：\n\n* 若用户想做 LoRA 训练，调用 `create_lora_task.py` 和 `poll_lora_task.py`\n* `poll_lora_task.py` 成功后会返回一条 `photo_task_id`，可继续用 `poll_photo_task.py` 拿图\n\n## Covered APIs\n\n本 Skill 当前覆盖：\n\n* `POST /open/v1/aigc/photo`\n* `GET /open/v1/aigc/photo/task`\n* `GET /open/v1/aigc/photo/task/page`\n* `POST /open/v1/aigc/motion`\n* `GET /open/v1/aigc/motion/task`\n* `POST /open/v1/aigc/lora/task/create`\n* `GET /open/v1/aigc/lora/task`\n\n## Scripts\n\n脚本目录：\n\n* `skills/chanjing-text-to-digital-person/scripts/`\n\n### 本仓库随附文件（勿与仅含 `_auth.py` 的精简包混淆）\n\n完整包内含 **`_auth.py`**、**`_task_api.py`**（供任务脚本复用）及下列 **`.py` CLI**；请用 **`python3 <路径>/<脚本名>.py`** 调用（与仓库内其它蝉镜 skill 约定一致）。\n\n| 文件名（仓库内） | 说明 |\n|------------------|------|\n| `_auth.py` | 读 **`credentials.json`**、刷新并 **写回** **`access_token` / `expire_in`**；缺 AK/SK 时尝试 **`open_login_page.py`** |\n| `_task_api.py` | 任务 API 共用逻辑（由各 CLI import） |\n| `create_photo_task.py` | 创建文生图任务 → `photo_unique_id` |\n| `get_photo_task.py` | 单个文生图任务详情 |\n| `list_tasks.py` | 任务列表（`type=1` photo，`type=2` motion） |\n| `poll_photo_task.py` | 轮询文生图至完成 → 默认首张图 URL |\n| `create_motion_task.py` | 创建图生视频 → `motion_unique_id` |\n| `get_motion_task.py` | 单个图生视频任务详情 |\n| `poll_motion_task.py` | 轮询图生视频至完成 → 默认视频 URL |\n| `create_lora_task.py` | 创建 LoRA 训练 → `lora_id` |\n| `get_lora_task.py` | LoRA 任务详情 |\n| `poll_lora_task.py` | 轮询 LoRA 至完成 → 默认首条 `photo_task_id` |\n| `download_result.py` | 仅在需要落盘时：下载到 `outputs/text-to-digital-person/`（或 `--output`） |\n\n若环境中 **缺少** 上表任一入口或 **`_task_api.py`**，属于 **分发/打包不完整**。\n\n## Usage Examples\n\n示例 1：文生图后直接图生视频\n\n```bash\nPHOTO_TASK_ID=$(python3 skills/chanjing-text-to-digital-person/scripts/create_photo_task.py \\\n  --age \"Young adult\" \\\n  --gender Female \\\n  --number-of-images 1 \\\n  --industry \"教育培训\" \\\n  --background \"现代直播间背景\" \\\n  --detail \"短发，亲和力强，职业装\" \\\n  --talking-pose \"上半身特写，站立讲解\")\n\nPHOTO_URL=$(python3 skills/chanjing-text-to-digital-person/scripts/poll_photo_task.py \\\n  --unique-id \"$PHOTO_TASK_ID\")\n\nMOTION_TASK_ID=$(python3 skills/chanjing-text-to-digital-person/scripts/create_motion_task.py \\\n  --photo-unique-id \"$PHOTO_TASK_ID\" \\\n  --photo-path \"$PHOTO_URL\" \\\n  --emotion \"自然播报，语气清晰自信\" \\\n  --gesture)\n\npython3 skills/chanjing-text-to-digital-person/scripts/poll_motion_task.py \\\n  --unique-id \"$MOTION_TASK_ID\"\n```\n\n示例 2：LoRA 训练\n\n```bash\nLORA_ID=$(python3 skills/chanjing-text-to-digital-person/scripts/create_lora_task.py \\\n  --name \"演示LoRA\" \\\n  --photo-url https://example.com/1.jpg \\\n  --photo-url https://example.com/2.jpg \\\n  --photo-url https://example.com/3.jpg \\\n  --photo-url https://example.com/4.jpg \\\n  --photo-url https://example.com/5.jpg)\n\npython3 skills/chanjing-text-to-digital-person/scripts/poll_lora_task.py \\\n  --lora-id \"$LORA_ID\"\n```\n\n## Download Rule\n\n下载是显式动作，不是默认动作：\n\n* `poll_photo_task.py` 和 `poll_motion_task.py` 成功后应先返回远端 URL\n* 不要自动下载结果文件\n* 只有当用户明确表达“下载到本地”“保存到 outputs”“帮我落盘”时，才执行 `download_result.py`\n\n## Output Convention\n\n默认本地输出目录：\n\n* `outputs/text-to-digital-person/`\n\n## Additional Resources\n\n更多接口细节见：\n\n* `skills/chanjing-text-to-digital-person/reference.md`\n* `skills/chanjing-text-to-digital-person/examples.md`","tags":["chanjing","text","digital","person","chan","skills","chanjing-ai","agent-skills","claude-code-skills","openclaw-skills"],"capabilities":["skill","source-chanjing-ai","skill-chanjing-text-to-digital-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-text-to-digital-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,934 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:31.148Z","embedding":null,"createdAt":"2026-04-19T00:41:00.430Z","updatedAt":"2026-04-22T13:03:31.148Z","lastSeenAt":"2026-04-22T13:03:31.148Z","tsv":"'/.chanjing/credentials.json':140 '/1.jpg':436 '/2.jpg':442 '/3.jpg':448 '/4.jpg':454 '/5.jpg)':460 '/open/v1/aigc/lora/task':240 '/open/v1/aigc/lora/task/create':238 '/open/v1/aigc/motion':234 '/open/v1/aigc/motion/task':236 '/open/v1/aigc/photo':228 '/open/v1/aigc/photo/task':230 '/open/v1/aigc/photo/task/page':232 '/scripts/open_login_page.py':149 '1':172,297,350,367 '2':180,300,421 '3':187 '4':195 '5':202 'access':272 'addit':490 'adult':360 'age':358 'agentpolici':47,74 'ak/sk':131,277 'api':223,282 'auth.py':31,82,246,249,267 'background':370 'bash':352,424 'chanj':2,7,56,111,118,127,146 'chanjing-credentials-guard':126,145 'chanjing-customised-person':110 'chanjing-text-to-digital-person':1,55 'chanjing-video-compos':117 'chanjing_config.py':153 'clawhub':50,53 'cli':85,254,285 'clientpermiss':46,167 'compos':120 'convent':487 'cover':222 'create_lora_task.py':211,317 'create_motion_task.py':189,306 'create_photo_task.py':174,287 'credenti':128,147,158 'credentials.json':269 'customis':112 'detail':372 'digit':5,10,59 'download':468 'download_result.py':205,334,485 'emot':408 'env':76 'environ':39 'exampl':348 'example.com':435,441,447,453,459 'example.com/1.jpg':434 'example.com/2.jpg':440 'example.com/3.jpg':446 'example.com/4.jpg':452 'example.com/5.jpg)':458 'expir':274 'femal':362 'ffmpeg/ffprobe':24,34 'gender':361 'gestur':411 'get':229,231,235,239 'get_lora_task.py':323 'get_motion_task.py':311 'get_photo_task.py':292 'guard':129,138,148,163 'id':179,194,218,291,310,322,333,355,387,390,393,399,402,416,419,426,465,467 'imag':366 'import':286 'industri':368 'list_tasks.py':294 'lora':16,103,208,319,321,324,328,422,425,464,466 'lora-id':463 'manifest.yaml':20,38,48,79,161 'motion':192,301,308,391,417 'name':429 'number':364 'number-of-imag':363 'open-api.chanjing.cc':141 'open_login_page.py':165,279 'output':339,481,486 'outputs/text-to-digital-person':337,489 'path':186,405 'permiss':45 'persist':159 'persistaccesstokenondisk':72 'person':6,11,60,113 'photo':177,185,216,289,298,331,353,381,388,397,400,404,406,432,438,444,450,456 'photo-path':403 'photo-unique-id':396 'photo-url':431,437,443,449,455 'poll_lora_task.py':213,214,326 'poll_motion_task.py':197,313,474 'poll_photo_task.py':182,220,302,472 'pose':378 'post':227,233,237 'precondit':121 'primaryenv':70 'purpos':157 'py':29,253,259 'python':62 'python3':26,256,356,383,394,412,427,461 'resourc':491 'rule':469 'run':54 'script':28,241 'skill':96,98,123,136,225,262 'skill-chanjing-text-to-digital-person' 'skills/chanjing-text-to-digital-person/examples.md':494 'skills/chanjing-text-to-digital-person/reference.md':493 'skills/chanjing-text-to-digital-person/scripts':243 'skills/chanjing-text-to-digital-person/scripts/create_lora_task.py':428 'skills/chanjing-text-to-digital-person/scripts/create_motion_task.py':395 'skills/chanjing-text-to-digital-person/scripts/create_photo_task.py':63,357 'skills/chanjing-text-to-digital-person/scripts/poll_lora_task.py':462 'skills/chanjing-text-to-digital-person/scripts/poll_motion_task.py':413 'skills/chanjing-text-to-digital-person/scripts/poll_photo_task.py':384 'slug':51 'source-chanjing-ai' 'standard':65,168 'talk':377 'talking-pos':376 'task':217,332,354,389,392,401,418 'task_api.py':32,83,250,280,343 'text':3,8,57 'token':133,273 'topic-agent-skills' 'topic-claude-code-skills' 'topic-openclaw-skills' 'topic-skills' 'type':296,299 'uniqu':178,193,290,309,386,398,415 'unique-id':385,414 'url':201,305,316,382,407,433,439,445,451,457,476 'usag':347 'use':90,94 'video':119,200 'webbrowser.open':151 'workflow':66,169 'young':359 '上传真人素材训练定制数字人':108 '上半身特写':379 '上表任一入口或':342 '下载到':336 '下载到本地':479 '下载是显式动作':470 '不':22 '不是默认动作':471 '不要自动下载结果文件':477 '与':132,137,156 '与仓库内其它蝉镜':261 '与各':84 '与同仓库':27 '且都是异步任务':171 '为准':80 '主流程通常分两段':170 '亲和力强':374 '仅在需要落盘时':335 '仓库内':265 '以':78 '以注册表为准':52 '任务':281 '任务列表':295 '任务状态':104 '任务详情':325 '优先使用':109,116 '使用命令':49 '供任务脚本复用':251 '依赖':23 '保存到':480 '共用':139 '共用逻辑':283 '写回':271 '凭据':155 '凭据与权限见':19 '凭据模型':43 '分发':345 '创建':318 '创建图生视频':307 '创建图生视频任务':190 '创建文生图任务':175,288 '刷新并':270 '前':124 '功能说明':12 '勿与仅含':245 '单一事实来源':68 '单个图生视频任务详情':312 '单个文生图任务详情':293 '及下列':252 '及本文':41 '变量':42 '只有在用户明确要求保存到本地时':203 '只有当用户明确表达':478 '可继续用':219 '可选':15,75 '可选扩展':206 '合规':44 '否则':150 '含':30 '和':212,473 '图生视频':102 '图生说话视频':14 '在用户明确要求时':105 '如果需求是':107,114 '完成':130 '完整包内含':248 '实现上由':81 '审阅与安全':154 '属于':344 '帮我落盘':482 '并提示本地执行':152 '当前覆盖':226 '当用户要做这些事时使用本':97 '得到':176,191 '得到最终':199 '必须先通过':125 '成功后会返回一条':215 '成功后应先返回远端':475 '或':338 '才执行':484 '才调用':204 '打包不完整':346 '执行本':122 '把生成图片或视频下载到本地':106 '把生成的人物图转成会说话的短视频':100 '拿图':221 '拿已有数字人做口播视频合成':115 '敏感字段':73 '教育培训':369 '文件名':264 '文生图':13 '文生图后直接图生视频':351 '无':33 '无凭证时':142 '时':483 '时尝试':278 '更多接口细节见':492 '本':135,224 '本仓库':61 '本仓库随附文件':244 '本篇从':87 '查询文生图':101 '校验':134 '根据人物提示词生成数字人形象图':99 '段':40 '演示lora':430 '环境变量与机器可读声明':36 '环境变量键名与说明':37 '现代直播间背景':371 '用户明确要求时下载生成物':18 '由各':284 '登记与审稿':67 '的':164 '的精简包混淆':247 '相关的逐项说明见':160 '省略':71 '短发':373 '示例':349,420 '站立讲解':380 '等':77 '等行为见':166 '约定一致':263 '缺':276 '缺凭证时可能子进程调用':162 '缺少':341 '职业装':375 '脚本':21 '脚本会自动打开蝉镜登录页':143 '脚本名':258 '脚本承担':86 '脚本目录':242 '自然播报':409 '至完成':329 '若同仓库存在则执行':144 '若环境中':340 '若用户想做':207 '见':64 '训练':209,320,423 '训练与轮询':17 '语气清晰自信':410 '说明':266 '请用':255 '读':268 '调用':173,181,188,196,210,260 '起写流程':91 '路径':69,257 '轮询':327 '轮询到成功':183,198 '轮询图生视频至完成':314 '轮询文生图至完成':303 '运行依赖':25 '选一张':184 '门控':35 '默认本地输出目录':488 '默认视频':315 '默认首张图':304 '默认首条':330","prices":[{"id":"97a3cf97-48db-488f-9124-d3fb8fd2cbdf","listingId":"d8408624-16da-4c8f-bb05-75e43f78b499","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:41:00.430Z"}],"sources":[{"listingId":"d8408624-16da-4c8f-bb05-75e43f78b499","source":"github","sourceId":"chanjing-ai/chan-skills/chanjing-text-to-digital-person","sourceUrl":"https://github.com/chanjing-ai/chan-skills/tree/main/skills/chanjing-text-to-digital-person","isPrimary":false,"firstSeenAt":"2026-04-19T00:41:00.430Z","lastSeenAt":"2026-04-22T13:03:31.148Z"}],"details":{"listingId":"d8408624-16da-4c8f-bb05-75e43f78b499","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"chanjing-ai","slug":"chanjing-text-to-digital-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":"11c5ba1d7e18ea0049d7f440763678899b021a91","skill_md_path":"skills/chanjing-text-to-digital-person/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/chanjing-ai/chan-skills/tree/main/skills/chanjing-text-to-digital-person"},"layout":"multi","source":"github","category":"chan-skills","frontmatter":{"name":"chanjing-text-to-digital-person","description":">-"},"skills_sh_url":"https://skills.sh/chanjing-ai/chan-skills/chanjing-text-to-digital-person"},"updatedAt":"2026-04-22T13:03:31.148Z"}}