{"id":"d85a647a-2cf0-4f43-9525-98cb3b1e3070","shortId":"DPedGE","kind":"skill","title":"chanjing-avatar","tagline":">-","description":"# Chanjing Avatar (Lip-Syncing)\n\n## 功能说明\n\n调用蝉镜 **Avatar** Open API：上传音视频素材、创建对口型任务、轮询与获取结果链接。脚本为 Python HTTP/上传客户端，**不**依赖 ffmpeg/ffprobe。\n\n## 运行依赖\n\n- **python3** 与同仓库 `scripts/*.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-avatar`\n- **本仓库**：`python skills/chanjing-avatar/scripts/create_task.py …`（流程见正文 **How to Use**）\n\n---\n\n## 登记与审稿（单一事实来源）\n\n主凭据、上传/下载边界、浏览器引导等：**以 `manifest.yaml` 为准**。本篇 **How to Use** 起为 API 步骤说明。\n\n## When to Use This Skill\n\nUse this skill when the user needs to create lip-syncing videos (digital avatar videos) with synchronized mouth movements.\n\nChanjing Avatar supports:\n\n* Text-driven or audio-driven lip-syncing\n* Multiple system voices for TTS\n* Video resolution customization\n* Task status polling and callback\n\n## How to Use This Skill\n\n**前置条件**：执行本 Skill 前，必须先通过 **chanjing-credentials-guard** 完成 AK/SK 与 Token 校验。凭据与审稿对表见 **`manifest.yaml`**。\n\n### Security & credentials（引用）\n\n详见 **`manifest.yaml`** 中 **`credentials`** 与 **`clientPermissions`**（含本地上传、结果 URL、浏览器行为；合规见顶层 **`permissions`**）。\n\nMultiple APIs need to be invoked. All share the domain: \"https://open-api.chanjing.cc\".\nAll requests communicate using json.\nYou should use utf-8 to encode and decode text throughout this task.\n\n1. Obtain an `access_token`, which is required for all subsequent API calls\n2. Upload your video/audio files using the File Management API to get `file_id`\n3. Create a lip-syncing task with video and audio/text using these `file_id` values\n4. Poll the Query Task Detail API or use Task List API to check status\n5. Download the generated video using the url in response when status is completed\n\n### Obtain AccessToken\n\n从 `~/.chanjing/credentials.json` 读取 `app_id` 和 `secret_key`，若无有效 Token 则调用：\n\n```http\nPOST /open/v1/access_token\nContent-Type: application/json\n```\n\n请求体（使用本地配置的 app_id、secret_key）：\n\n```json\n{\n  \"app_id\": \"<从 credentials.json 读取>\",\n  \"secret_key\": \"<从 credentials.json 读取>\"\n}\n```\n\nResponse example:\n\n```json\n{\n  \"trace_id\": \"8ff3fcd57b33566048ef28568c6cee96\",\n  \"code\": 0,\n  \"msg\": \"success\",\n  \"data\": {\n    \"access_token\": \"1208CuZcV1Vlzj8MxqbO0kd1Wcl4yxwoHl6pYIzvAGoP3DpwmCCa73zmgR5NCrNu\",\n    \"expire_in\": 1721289220\n  }\n}\n```\n\nResponse field description:\n\n| First-level Field | Second-level Field | Description |\n|---|---|---|\n| code | | Response status code |\n| msg | | Response message |\n| data | | Response data |\n| | access_token | Valid for one day, previous token will be invalidated |\n| | expire_in | Token expiration time |\n\nResponse Status Code Description\n\n| Code | Description |\n|---|---|\n| 0 | Success |\n| 400 | Invalid parameter format |\n| 40000 | Parameter error |\n| 50000 | System internal error |\n\n### Upload Media Files (File Management)\n\nBefore creating a lip-syncing task, you **must** upload your video (and optional audio) files using the File Management API to obtain `file_id` values.\n\nThe full documentation is here: `[File Management](https://doc.chanjing.cc/api/file/file-management.html)`.\n\n#### Step 1: Get upload URL\n\n```http\nGET /open/v1/common/create_upload_url\naccess_token: {{access_token}}\n```\n\nQuery params:\n\n| Key | Example | Description |\n|---|---|---|\n| service | lip_sync_video / lip_sync_audio | File usage purpose. Use `lip_sync_video` for driving video, `lip_sync_audio` for audio (if audio-driven). |\n| name | 1.mp4 | Original file name including extension |\n\nYou will get a response containing `sign_url`, `mime_type`, and `file_id`. Use the `sign_url` with HTTP `PUT` to upload the file, setting `Content-Type` to the returned `mime_type`. After the PUT completes, **poll the file detail API** until the file is ready (do not assume a fixed wait). Keep the returned `file_id` for `video_file_id` / `audio_file_id` below.\n\n**Polling:** Call `GET /open/v1/common/file_detail?id={{file_id}}` with `access_token` until the response `data.status` indicates success (e.g. `status === 2`). Only then use the `file_id` for the create task API.\n\n### Create Lip-Syncing Task\n\nSubmit a lip-syncing video creation task, which returns a video ID for polling later.\n\n```http\nPOST /open/v1/video_lip_sync/create\naccess_token: {{access_token}}\nContent-Type: application/json\n```\n\nRequest body example (TTS-driven):\n\n```json\n{\n  \"video_file_id\": \"e284db4d95de4220afe78132158156b5\",\n  \"screen_width\": 1080,\n  \"screen_height\": 1920,\n  \"callback\": \"https://example.com/openapi/callback\",\n  \"model\": 0,\n  \"audio_type\": \"tts\",\n  \"tts_config\": {\n    \"text\": \"君不见黄河之水天上来，奔流到海不复回。\",\n    \"audio_man_id\": \"C-f2429d07554749839849497589199916\",\n    \"speed\": 1,\n    \"pitch\": 1\n  }\n}\n```\n\nRequest body example (Audio-driven):\n\n```json\n{\n  \"video_file_id\": \"e284db4d95de4220afe78132158156b5\",\n  \"screen_width\": 1080,\n  \"screen_height\": 1920,\n  \"model\": 0,\n  \"audio_type\": \"audio\",\n  \"audio_file_id\": \"audio_file_id_from_file_management\"\n}\n```\n\nRequest field description:\n\n| Parameter Name | Type | Required | Description |\n|---|---|---|---|\n| video_file_id | string | Yes | Video file ID from File Management (`data.file_id`). Supports mp4, mov, webm |\n| screen_width | int | No | Screen width, default 1080 |\n| screen_height | int | No | Screen height, default 1920 |\n| backway | int | No | Playback order when reaching end: 1-normal, 2-reverse. Default 1 |\n| drive_mode | string | No | Drive mode: \"\"-normal, \"random\"-random frame. Default \"\" |\n| callback | string | No | Callback URL for async notification |\n| model | int | No | Model version: 0-basic, 1-high quality. Default 0 |\n| audio_type | string | No | Audio type: \"tts\"-text driven, \"audio\"-audio driven. Default \"tts\" |\n| tts_config | object | Yes (for tts) | TTS configuration when audio_type=\"tts\" |\n| tts_config.text | string | Yes (for tts) | Text to synthesize |\n| tts_config.audio_man_id | string | Yes (for tts) | Voice ID |\n| tts_config.speed | number | No | Speech speed: 0.5-2, default 1 |\n| tts_config.pitch | number | No | Pitch, default 1 |\n| audio_file_id | string | Yes (for audio) | Audio file ID from File Management (`data.file_id`) when `audio_type=\"audio\"`. Supports mp3, m4a, wav |\n| volume | int | No | Volume: 1-100, default 100 |\n\nResponse example:\n\n```json\n{\n  \"trace_id\": \"8d10659438827bd4d59eaa2696f9d391\",\n  \"code\": 0,\n  \"msg\": \"success\",\n  \"data\": \"9499ed79995c4bdb95f0d66ca84419fd\"\n}\n```\n\nResponse field description:\n\n| Field | Description |\n|---|---|\n| code | Response status code |\n| msg | Response message |\n| data | Video ID for subsequent polling |\n\n### Query Task List\n\nGet a list of lip-syncing tasks.\n\n```http\nPOST /open/v1/video_lip_sync/list\naccess_token: {{access_token}}\nContent-Type: application/json\n```\n\nRequest body:\n\n```json\n{\n  \"page\": 1,\n  \"page_size\": 10\n}\n```\n\nRequest field description:\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| page | int | No | Page number, default 1 |\n| page_size | int | No | Page size, default 10 |\n\nResponse example:\n\n```json\n{\n  \"trace_id\": \"8d10659438827bd4d59eaa2696f9d391\",\n  \"code\": 0,\n  \"msg\": \"success\",\n  \"data\": {\n    \"list\": [\n      {\n        \"id\": \"9499ed79995c4bdb95f0d66ca84419fd\",\n        \"status\": 20,\n        \"progress\": 100,\n        \"msg\": \"success\",\n        \"video_url\": \"https://res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.mp4\",\n        \"preview_url\": \"https://res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.jpg\",\n        \"duration\": 300,\n        \"create_time\": 1738636800\n      }\n    ],\n    \"page_info\": {\n      \"page\": 1,\n      \"size\": 10,\n      \"total_count\": 1,\n      \"total_page\": 1\n    }\n  }\n}\n```\n\nResponse field description:\n\n| First-level Field | Second-level Field | Description |\n|---|---|---|\n| code | | Response status code |\n| msg | | Response message |\n| data | | Response data |\n| | list | Task list |\n| | | id: Video ID |\n| | | status: Task status (0-pending, 10-generating, 20-success, 30-failed) |\n| | | progress: Progress 0-100 |\n| | | msg: Task message |\n| | | video_url: Video download URL |\n| | | preview_url: Cover image URL |\n| | | duration: Video duration in ms |\n| | | create_time: Creation time (unix timestamp) |\n| | page_info | Pagination info |\n\n### Query Task Detail\n\nPoll the following API to check task status until completed.\n\n```http\nGET /open/v1/video_lip_sync/detail\naccess_token: {{access_token}}\n```\n\nQuery params:\n\n| Parameter | Description |\n|---|---|\n| id | Video ID |\n\nExample: `GET /open/v1/video_lip_sync/detail?id=9499ed79995c4bdb95f0d66ca84419fd`\n\nResponse example:\n\n```json\n{\n  \"trace_id\": \"8d10659438827bd4d59eaa2696f9d391\",\n  \"code\": 0,\n  \"msg\": \"success\",\n  \"data\": {\n    \"id\": \"9499ed79995c4bdb95f0d66ca84419fd\",\n    \"status\": 20,\n    \"progress\": 100,\n    \"msg\": \"success\",\n    \"video_url\": \"https://res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.mp4\",\n    \"preview_url\": \"https://res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.jpg\",\n    \"duration\": 300,\n    \"create_time\": 1738636800\n  }\n}\n```\n\nResponse field description:\n\n| First-level Field | Second-level Field | Description |\n|---|---|---|\n| code | | Response status code |\n| msg | | Response message |\n| data | | Response data |\n| | id | Video ID |\n| | status | Task status: 0-pending, 10-generating, 20-success, 30-failed |\n| | progress | Progress 0-100 |\n| | msg | Task message |\n| | video_url | Video download URL |\n| | preview_url | Cover image URL |\n| | duration | Video duration in ms |\n| | create_time | Creation time (unix timestamp) |\n\n### Callback Notification\n\nWhen a callback URL is provided, the system will send a POST request when the task completes:\n\n```json\n{\n  \"trace_id\": \"8d10659438827bd4d59eaa2696f9d391\",\n  \"code\": 0,\n  \"msg\": \"success\",\n  \"data\": {\n    \"id\": \"9499ed79995c4bdb95f0d66ca84419fd\",\n    \"status\": 20,\n    \"progress\": 100,\n    \"msg\": \"success\",\n    \"video_url\": \"https://res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.mp4\",\n    \"preview_url\": \"https://res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.jpg\",\n    \"duration\": 300,\n    \"create_time\": 1738636800\n  }\n}\n```\n\n## Scripts\n\n本 Skill 提供脚本（`skills/chanjing-avatar/scripts/`），与 **chanjing-credentials-guard** 使用同一配置文件（`~/.chanjing/credentials.json`）获取 Token。\n\n| 脚本 | 说明 |\n|------|------|\n| `get_upload_url.py` | 获取上传链接，输出 `sign_url`、`mime_type`、`file_id` |\n| `upload_file.py` | 上传本地文件，轮询 file_detail 直到就绪后输出 `file_id` |\n| `create_task.py` | 创建对口型任务（TTS 或音频驱动），输出视频任务 id |\n| `poll_task.py` | 轮询任务直到完成，输出 `video_url` |\n\n示例（在项目根或 skill 目录下执行）：\n\n```bash\n# 1. 上传驱动视频，得到 video_file_id\nVIDEO_FILE_ID=$(python skills/chanjing-avatar/scripts/upload_file.py --service lip_sync_video --file ./my_video.mp4)\n\n# 2. 创建 TTS 对口型任务（需先通过 list_common_audio 获取 audio_man_id）\nTASK_ID=$(python skills/chanjing-avatar/scripts/create_task.py \\\n  --video-file-id \"$VIDEO_FILE_ID\" \\\n  --text \"君不见黄河之水天上来\" \\\n  --audio-man-id \"C-f2429d07554749839849497589199916\")\n\n# 3. 轮询直到完成，得到视频下载链接\npython skills/chanjing-avatar/scripts/poll_task.py --id \"$TASK_ID\"\n```\n\n音频驱动时：先上传音频得到 `audio_file_id`，再 `create_task.py --video-file-id <id> --audio-file-id <audio_file_id>`。\n\n## Response Status Code Description\n\n| Code | Description |\n|---|---|\n| 0 | Response successful |\n| 10400 | AccessToken verification failed |\n| 40000 | Parameter error |\n| 40001 | Exceeds RPM/QPS limit |\n| 50000 | System internal error |","tags":["chanjing","avatar","chan","skills","chanjing-ai","agent-skills","claude-code-skills","openclaw-skills"],"capabilities":["skill","source-chanjing-ai","skill-chanjing-avatar","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-avatar","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 (11,396 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.793Z","embedding":null,"createdAt":"2026-04-19T00:40:57.181Z","updatedAt":"2026-04-22T13:03:30.793Z","lastSeenAt":"2026-04-22T13:03:30.793Z","tsv":"'-100':840,1014,1148 '-2':803 '-8':184 '/.chanjing/credentials.json':268,1235 '/api/file/file-management.html)':416 '/my_video.mp4':1289 '/open/v1/access_token':280 '/open/v1/common/create_upload_url':424 '/open/v1/common/file_detail':537 '/open/v1/video_lip_sync/create':587 '/open/v1/video_lip_sync/detail':1058,1072 '/open/v1/video_lip_sync/list':886 '/openapi/callback':616 '/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.jpg':954,1103,1218 '/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.mp4':949,1098,1213 '0':309,363,618,655,747,753,850,932,1003,1013,1082,1137,1147,1197,1351 '0.5':802 '1':193,418,461,634,636,717,722,749,805,811,839,899,916,963,968,971,1273 '10':902,924,965,1005,1139 '100':842,942,1091,1206 '10400':1354 '1080':609,650,700 '1208cuzcv1vlzj8mxqbo0kd1wcl4yxwohl6pyizvagop3dpwmcca73zmgr5ncrnu':315 '1721289220':318 '1738636800':959,1108,1223 '1920':612,653,708 '2':206,552,719,1290 '20':940,1007,1089,1141,1204 '3':220,1322 '30':1009,1143 '300':956,1105,1220 '4':236 '400':365 '40000':369,1358 '40001':1361 '5':251 '50000':372,1365 '8d10659438827bd4d59eaa2696f9d391':848,930,1080,1195 '8ff3fcd57b33566048ef28568c6cee96':307 '9499ed79995c4bdb95f0d66ca84419fd':854,938,1074,1087,1202 'access':196,313,341,425,427,542,588,590,887,889,1059,1061 'accesstoken':266,1355 'agentpolici':43 'ak/sk':143 'api':13,75,165,204,215,242,247,401,509,563,1049 'app':270,287,292 'application/json':284,595,894 'assum':517 'async':740 'audio':110,395,440,453,455,458,530,619,627,641,656,658,659,662,754,758,763,764,777,812,818,819,828,830,1297,1299,1316,1332,1342 'audio-driven':109,457,640 'audio-file-id':1341 'audio-man-id':1315 'audio/text':230 'avatar':3,5,11,53,96,103 'backway':709 'bash':1272 'basic':748 'bodi':597,638,896 'c':631,1320 'c-f2429d07554749839849497589199916':630,1319 'call':205,535 'callback':127,613,734,737,1173,1177 'chanj':2,4,52,102,139,1231 'chanjing-avatar':1,51 'chanjing-credentials-guard':138,1230 'check':249,1051 'clawhub':46,49 'clientpermiss':42,157 'code':308,331,334,359,361,849,860,863,931,984,987,1081,1121,1124,1196,1347,1349 'common':1296 'communic':177 'complet':264,504,1055,1191 'config':623,769 'configur':775 'contain':473 'content':282,494,593,892 'content-typ':281,493,592,891 'count':967 'cover':1025,1159 'creat':90,221,382,561,564,957,1033,1106,1167,1221 'create_task.py':1257,1336 'creation':575,1035,1169 'credenti':140,150,155,1232 'credentials.json':295,300 'custom':122 'data':312,338,340,853,867,935,991,993,1085,1128,1130,1200 'data.file':687,825 'data.status':547 'day':346 'decod':188 'default':699,707,721,733,752,766,804,810,841,915,923 'descript':321,330,360,362,433,670,675,857,859,905,909,974,983,1066,1111,1120,1348,1350 'detail':241,508,1045,1253 'digit':95 'doc.chanjing.cc':415 'doc.chanjing.cc/api/file/file-management.html)':414 'document':409 'domain':173 'download':252,1021,1155 'drive':449,723,727 'driven':107,111,459,601,642,762,765 'durat':955,1028,1030,1104,1162,1164,1219 'e.g':550 'e284db4d95de4220afe78132158156b5':606,647 'encod':186 'end':716 'environ':35 'error':371,375,1360,1368 'exampl':303,432,598,639,844,926,1070,1076 'example.com':615 'example.com/openapi/callback':614 'exceed':1362 'expir':316,352,355 'extens':467 'f2429d07554749839849497589199916':632,1321 'fail':1010,1144,1357 'ffmpeg/ffprobe':23,30 'field':320,325,329,669,856,858,904,973,978,982,1110,1115,1119 'file':210,213,218,233,378,379,396,399,404,412,441,464,479,491,507,512,524,528,531,539,557,604,645,660,663,666,677,682,685,813,820,823,1247,1252,1255,1277,1280,1288,1308,1311,1333,1339,1343 'first':323,976,1113 'first-level':322,975,1112 'fix':519 'follow':1048 'format':368 'frame':732 'full':408 'generat':254,1006,1140 'get':217,419,423,470,536,876,1057,1071 'get_upload_url.py':1240 'guard':141,1233 'height':611,652,702,706 'high':750 'http':19,278,422,486,585,884,1056 'id':219,234,271,288,293,306,405,480,525,529,532,538,540,558,581,605,629,646,661,664,678,683,688,790,796,814,821,826,847,869,929,937,997,999,1067,1069,1073,1079,1086,1131,1133,1194,1201,1248,1256,1262,1278,1281,1301,1303,1309,1312,1318,1327,1329,1334,1340,1344 'imag':1026,1160 'includ':466 'indic':548 'info':961,1040,1042 'int':695,703,710,743,836,911,919 'intern':374,1367 'invalid':351,366 'invok':169 'json':179,291,304,602,643,845,897,927,1077,1192 'keep':521 'key':274,290,298,431 'later':584 'level':324,328,977,981,1114,1118 'limit':1364 'lip':7,92,113,224,385,435,438,445,451,566,572,881,1285 'lip-sync':6,91,112,223,384,565,571,880 'list':246,875,878,936,994,996,1295 'm4a':833 'man':628,789,1300,1317 'manag':214,380,400,413,667,686,824 'manifest.yaml':34,44,68,148,153 'media':377 'messag':337,866,990,1017,1127,1151 'mime':476,499,1245 'mode':724,728 'model':617,654,742,745 'mouth':100 'mov':691 'movement':101 'mp3':832 'mp4':462,690 'ms':1032,1166 'msg':310,335,851,864,933,943,988,1015,1083,1092,1125,1149,1198,1207 'multipl':115,164 'must':389 'name':460,465,672 'need':88,166 'normal':718,729 'notif':741,1174 'number':798,807,914 'object':770 'obtain':194,265,403 'one':345 'open':12 'open-api.chanjing.cc':174 'option':394 'order':713 'origin':463 'page':898,900,910,913,917,921,960,962,970,1039 'pagin':1041 'param':430,1064 'paramet':367,370,671,906,1065,1359 'pend':1004,1138 'permiss':41,163 'pitch':635,809 'playback':712 'poll':125,237,505,534,583,872,1046 'poll_task.py':1263 'post':279,586,885,1186 'preview':950,1023,1099,1157,1214 'previous':347 'progress':941,1011,1012,1090,1145,1146,1205 'provid':1180 'purpos':443 'put':487,503 'py':28 'python':18,55,1282,1304,1325 'python3':25 'qualiti':751 'queri':239,429,873,1043,1063 'random':730,731 'reach':715 'readi':514 'request':176,596,637,668,895,903,1187 'requir':200,674,908 'res.chanjing.cc':948,953,1097,1102,1212,1217 'res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.jpg':952,1101,1216 'res.chanjing.cc/xxx/lip-sync/9499ed79995c4bdb95f0d66ca84419fd.mp4':947,1096,1211 'resolut':121 'respons':260,302,319,332,336,339,357,472,546,843,855,861,865,925,972,985,989,992,1075,1109,1122,1126,1129,1345,1352 'return':498,523,578 'revers':720 'rpm/qps':1363 'run':50 'screen':607,610,648,651,693,697,701,705 'script':27,1224 'second':327,980,1117 'second-level':326,979,1116 'secret':273,289,297 'secur':149 'send':1184 'servic':434,1284 'set':492 'share':171 'sign':474,483,1243 'size':901,918,922,964 'skill':81,84,132,135,1226,1270 'skill-chanjing-avatar' 'skills/chanjing-avatar/scripts':1228 'skills/chanjing-avatar/scripts/create_task.py':56,1305 'skills/chanjing-avatar/scripts/poll_task.py':1326 'skills/chanjing-avatar/scripts/upload_file.py':1283 'slug':47 'source-chanjing-ai' 'speech':800 'speed':633,801 'status':124,250,262,333,358,551,862,939,986,1000,1002,1053,1088,1123,1134,1136,1203,1346 'step':417 'string':679,725,735,756,781,791,815 'submit':569 'subsequ':203,871 'success':311,364,549,852,934,944,1008,1084,1093,1142,1199,1208,1353 'support':104,689,831 'sync':8,93,114,225,386,436,439,446,452,567,573,882,1286 'synchron':99 'synthes':787 'system':116,373,1182,1366 'task':123,192,226,240,245,387,562,568,576,874,883,995,1001,1016,1044,1052,1135,1150,1190,1302,1328 'text':106,189,624,761,785,1313 'text-driven':105 'throughout':190 'time':356,958,1034,1036,1107,1168,1170,1222 'timestamp':1038,1172 'token':145,197,276,314,342,348,354,426,428,543,589,591,888,890,1060,1062,1237 'topic-agent-skills' 'topic-claude-code-skills' 'topic-openclaw-skills' 'topic-skills' 'total':966,969 'trace':305,846,928,1078,1193 'tts':119,600,621,622,760,767,768,773,774,779,784,794,1259,1292 'tts-driven':599 'tts_config.audio':788 'tts_config.pitch':806 'tts_config.speed':797 'tts_config.text':780 'type':283,477,495,500,594,620,657,673,755,759,778,829,893,907,1246 'unix':1037,1171 'upload':207,376,390,420,489 'upload_file.py':1249 'url':160,258,421,475,484,738,946,951,1019,1022,1024,1027,1095,1100,1153,1156,1158,1161,1178,1210,1215,1244,1267 'usag':442 'use':60,73,79,82,130,178,182,211,231,244,256,397,444,481,555 'user':87 'utf':183 'valid':343 'valu':235,406 'verif':1356 'version':746 'video':94,97,120,228,255,392,437,447,450,527,574,580,603,644,676,681,868,945,998,1018,1020,1029,1068,1094,1132,1152,1154,1163,1209,1266,1276,1279,1287,1307,1310,1338 'video-file-id':1306,1337 'video/audio':209 'voic':117,795 'volum':835,838 'wait':520 'wav':834 'webm':692 'width':608,649,694,698 'yes':680,771,782,792,816 '上传':64 '上传客户端':20 '上传本地文件':1250 '上传音视频素材':14 '上传驱动视频':1274 '下载边界':65 '不':21 '与':144,156,1229 '与同仓库':26 '中':154 '为准':69 '主凭据':63 '从':267,294,299 '以':67 '以注册表为准':48 '使用同一配置文件':1234 '使用命令':45 '使用本地配置的':286 '依赖':22 '先上传音频得到':1331 '再':1335 '凭据':39 '凭据与审稿对表见':147 '则调用':277 '创建':1291 '创建对口型任务':15,1258 '前':136 '前置条件':133 '功能说明':9 '单一事实来源':62 '及本文':37 '变量':38 '合规':40 '合规见顶层':162 '君不见黄河之水天上来':625,1314 '含本地上传':158 '和':272 '在项目根或':1269 '奔流到海不复回':626 '完成':142 '对口型任务':1293 '引用':151 '得到':1275 '得到视频下载链接':1324 '必须先通过':137 '或音频驱动':1260 '执行本':134 '提供脚本':1227 '无':29 '本':1225 '本仓库':54 '本篇':70 '校验':146 '步骤说明':76 '段':36 '流程见正文':57 '浏览器引导等':66 '浏览器行为':161 '环境变量与机器可读声明':32 '环境变量键名与说明':33 '登记与审稿':61 '目录下执行':1271 '直到就绪后输出':1254 '示例':1268 '结果':159 '脚本':1238 '脚本为':17 '若无有效':275 '获取':1236,1298 '获取上传链接':1241 '详见':152 '说明':1239 '请求体':285 '读取':269,296,301 '调用蝉镜':10 '起为':74 '轮询':1251 '轮询与获取结果链接':16 '轮询任务直到完成':1264 '轮询直到完成':1323 '输出':1242,1265 '输出视频任务':1261 '运行依赖':24 '门控':31 '需先通过':1294 '音频驱动时':1330","prices":[{"id":"91399835-d444-4af6-a72c-f517828dd694","listingId":"d85a647a-2cf0-4f43-9525-98cb3b1e3070","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:57.181Z"}],"sources":[{"listingId":"d85a647a-2cf0-4f43-9525-98cb3b1e3070","source":"github","sourceId":"chanjing-ai/chan-skills/chanjing-avatar","sourceUrl":"https://github.com/chanjing-ai/chan-skills/tree/main/skills/chanjing-avatar","isPrimary":false,"firstSeenAt":"2026-04-19T00:40:57.181Z","lastSeenAt":"2026-04-22T13:03:30.793Z"}],"details":{"listingId":"d85a647a-2cf0-4f43-9525-98cb3b1e3070","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"chanjing-ai","slug":"chanjing-avatar","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":"a5c4ca534afea67d35c73a494d2162e9155981b3","skill_md_path":"skills/chanjing-avatar/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/chanjing-ai/chan-skills/tree/main/skills/chanjing-avatar"},"layout":"multi","source":"github","category":"chan-skills","frontmatter":{"name":"chanjing-avatar","description":">-"},"skills_sh_url":"https://skills.sh/chanjing-ai/chan-skills/chanjing-avatar"},"updatedAt":"2026-04-22T13:03:30.793Z"}}