$npx -y skills add chanjing-ai/chan-skills --skill chanjing-text-to-digital-personUse Chanjing text-to-digital-person APIs for AI portraits, talking videos, optional LoRA training, polling, and explicit downloads when requested.
| 1 | # Chanjing Text To Digital Person |
| 2 | |
| 3 | ## 功能说明 |
| 4 | |
| 5 | 文生图、图生说话视频、可选 **LoRA** 训练与轮询;用户明确要求时下载生成物。凭据与权限见 **`manifest.yaml`**。脚本**不**依赖 ffmpeg/ffprobe。 |
| 6 | |
| 7 | ## 运行依赖 |
| 8 | |
| 9 | - **python3** 与同仓库 `scripts/*.py`(含 `_auth.py`、`_task_api.py`) |
| 10 | - **无** ffmpeg/ffprobe 门控 |
| 11 | |
| 12 | ## 环境变量与机器可读声明 |
| 13 | |
| 14 | - 环境变量键名与说明:**`manifest.yaml`**(`environment` 段)及本文 |
| 15 | - 变量、凭据模型、合规 **`permissions`**、**`clientPermissions`、`agentPolicy`**:**`manifest.yaml`** |
| 16 | |
| 17 | ## 使用命令 |
| 18 | |
| 19 | - **ClawHub**(slug 以注册表为准):`clawhub run chanjing-text-to-digital-person` |
| 20 | - **本仓库**:`python skills/chanjing-text-to-digital-person/scripts/create_photo_task.py …`(见 **Standard Workflow**) |
| 21 | |
| 22 | --- |
| 23 | |
| 24 | ## 登记与审稿(单一事实来源) |
| 25 | |
| 26 | 路径、`primaryEnv` 省略、**`persistAccessTokenOnDisk`**、敏感字段、**`agentPolicy`**、可选 env 等:**以 `manifest.yaml` 为准**。实现上由 **`_auth.py`**、**`_task_api.py`** 与各 CLI 脚本承担;本篇从 **When to Use** 起写流程。 |
| 27 | |
| 28 | ## When to Use This Skill |
| 29 | |
| 30 | 当用户要做这些事时使用本 Skill: |
| 31 | |
| 32 | * 根据人物提示词生成数字人形象图 |
| 33 | * 把生成的人物图转成会说话的短视频 |
| 34 | * 查询文生图 / 图生视频 / LoRA 任务状态 |
| 35 | * 在用户明确要求时,把生成图片或视频下载到本地 |
| 36 | |
| 37 | 如果需求是“上传真人素材训练定制数字人”,优先使用 `chanjing-customised-person`。 |
| 38 | 如果需求是“拿已有数字人做口播视频合成”,优先使用 `chanjing-video-compose`。 |
| 39 | |
| 40 | ## Preconditions |
| 41 | |
| 42 | 执行本 Skill 前,必须先通过 `chanjing-credentials-guard` 完成 AK/SK 与 Token 校验。 |
| 43 | |
| 44 | 本 Skill 与 guard 共用: |
| 45 | |
| 46 | * `~/.chanjing/credentials.json` |
| 47 | * `https://open-api.chanjing.cc` |
| 48 | |
| 49 | 无凭证时,脚本会自动打开蝉镜登录页(若同仓库存在则执行 **`chanjing-credentials-guard/scripts/open_login_page.py`**,否则 **`webbrowser.open`**),并提示本地执行 **`chanjing_config.py`**。 |
| 50 | |
| 51 | ### 审阅与安全(凭据) |
| 52 | |
| 53 | 与 **Purpose / Credentials / Persistence** 相关的逐项说明见 **`manifest.yaml`**(缺凭证时可能子进程调用 guard 的 **`open_login_page.py`** 等行为见 **`clientPermissions`**)。 |
| 54 | |
| 55 | ## Standard Workflow |
| 56 | |
| 57 | 主流程通常分两段,且都是异步任务: |
| 58 | |
| 59 | 1. 调用 `create_photo_task.py` 创建文生图任务,得到 `photo_unique_id` |
| 60 | 2. 调用 `poll_photo_task.py` 轮询到成功,选一张 `photo_path` |
| 61 | 3. 调用 `create_motion_task.py` 创建图生视频任务,得到 `motion_unique_id` |
| 62 | 4. 调用 `poll_motion_task.py` 轮询到成功,得到最终 `video_url` |
| 63 | 5. 只有在用户明确要求保存到本地时,才调用 `download_result.py` |
| 64 | |
| 65 | 可选扩展: |
| 66 | |
| 67 | * 若用户想做 LoRA 训练,调用 `create_lora_task.py` 和 `poll_lora_task.py` |
| 68 | * `poll_lora_task.py` 成功后会返回一条 `photo_task_id`,可继续用 `poll_photo_task.py` 拿图 |
| 69 | |
| 70 | ## Covered APIs |
| 71 | |
| 72 | 本 Skill 当前覆盖: |
| 73 | |
| 74 | * `POST /open/v1/aigc/photo` |
| 75 | * `GET /open/v1/aigc/photo/task` |
| 76 | * `GET /open/v1/aigc/photo/task/page` |
| 77 | * `POST /open/v1/aigc/motion` |
| 78 | * `GET /open/v1/aigc/motion/task` |
| 79 | * `POST /open/v1/aigc/lora/task/create` |
| 80 | * `GET /open/v1/aigc/lora/task` |
| 81 | |
| 82 | ## Scripts |
| 83 | |
| 84 | 脚本目录: |
| 85 | |
| 86 | * `skills/chanjing-text-to-digital-person/scripts/` |
| 87 | |
| 88 | ### 本仓库随附文件(勿与仅含 `_auth.py` 的精简包混淆) |
| 89 | |
| 90 | 完整包内含 **`_auth.py`**、**`_task_api.py`**(供任务脚本复用)及下列 **`.py` CLI**;请用 **`python3 <路径>/<脚本名>.py`** 调用(与仓库内其它蝉镜 skill 约定一致)。 |
| 91 | |
| 92 | | 文件名(仓库内) | 说明 | |
| 93 | |------------------|------| |
| 94 | | `_auth.py` | 读 **`credentials.json`**、刷新并 **写回** **`access_token` / `expire_in`**;缺 AK/SK 时尝试 **`open_login_page.py`** | |
| 95 | | `_task_api.py` | 任务 API 共用逻辑(由各 CLI import) | |
| 96 | | `create_photo_task.py` | 创建文生图任务 → `photo_unique_id` | |
| 97 | | `get_photo_task.py` | 单个文生图任务详情 | |
| 98 | | `list_tasks.py` | 任务列表(`type=1` photo,`type=2` motion) | |
| 99 | | `poll_photo_task.py` | 轮询文生图至完成 → 默认首张图 URL | |
| 100 | | `create_motion_task.py` | 创建图生视频 → `motion_unique_id` | |
| 101 | | `get_motion_task.py` | 单个图生视频任务详情 | |
| 102 | | `poll_motion_task.py` | 轮询图生视频至完成 → 默认视频 URL | |
| 103 | | `create_lora_task.py` | 创建 LoRA 训练 → `lora_id` | |
| 104 | | `get_lora_task.py` | LoRA 任务详情 | |
| 105 | | `poll_lora_task.py` | 轮询 LoRA 至完成 → 默认首条 `photo_task_id` | |
| 106 | | `download_result.py` | 仅在需要落盘时:下载到 `outputs/text-to-digital-person/`(或 `--output`) | |
| 107 | |
| 108 | 若环境中 **缺少** 上表任一入口或 **`_task_api.py`**,属于 **分发/打包不完整**。 |
| 109 | |
| 110 | ## Usage Examples |
| 111 | |
| 112 | 示例 1:文生图后直接图生视频 |
| 113 | |
| 114 | ```bash |
| 115 | PHOTO_TASK_ID=$(python3 skills/chanjing-text-to-digital-person/scripts/create_photo_task.py \ |
| 116 | --age "Young adult" \ |
| 117 | --gender Female \ |
| 118 | --number-of-images 1 \ |
| 119 | --industry "教育培训" \ |
| 120 | --background "现代直播间背景" \ |
| 121 | --detail "短发,亲和力强,职业装" \ |
| 122 | --talking-pose "上半身特写,站立讲解") |
| 123 | |
| 124 | PHOTO_URL=$(python3 skills/chanjing-text-to-digital-person/scripts/poll_photo_task.py \ |
| 125 | --unique-id "$PHOTO_TASK_ID") |
| 126 | |
| 127 | MOTION_TASK_ID=$(python3 skills/chanjing-text-to-digital-person/scripts/create_motion_task.py \ |
| 128 | --photo-unique-id "$PHOTO_TASK_ID" \ |
| 129 | --photo-path "$PHOTO_URL" \ |
| 130 | --emotion "自然播报,语气清晰自信" \ |
| 131 | --gesture) |
| 132 | |
| 133 | python3 skills/chanjing-text-to-digital-person/scripts/poll_motion_task.py \ |
| 134 | --unique-id "$MOTION_TASK_ID" |
| 135 | ``` |
| 136 | |
| 137 | 示例 2:LoRA 训练 |
| 138 | |
| 139 | ```bash |
| 140 | LORA_ID=$(python3 skills/chanjing-text-to-digital-person/scripts/create_lora_task.py \ |
| 141 | --name "演示LoRA" \ |
| 142 | --photo-url https://example.com/1.jpg \ |
| 143 | --photo-url https://example.com/2.jpg \ |
| 144 | --photo-url https://example.com/3.jpg \ |
| 145 | --photo-url https://ex |