Install
openclaw skills install @xuhongfeii2/shuziren-koubo-shengchengopenclaw skills install @xuhongfeii2/shuziren-koubo-shengchengUse this skill when OpenClaw should call this project's platform API instead of calling Chanjing directly.
Read these references before using the scripts:
Preferred:
CHANJING_PLATFORM_API_TOKENOptional:
CHANJING_PLATFORM_BASE_URLBackward compatible fallback:
CHANJING_PLATFORM_API_KEYCHANJING_PLATFORM_API_SECRETImportant guidance:
http://easyclaw.bar/shuziren/user/http://easyclaw.bar/shuzirenapi to get a tokenCHANJING_PLATFORM_BASE_URL is optional and defaults to http://easyclaw.bar/shuzirenapiapp_id / secret_keyopenclaw cron is availablescripts/ for any operation./api/me, /api/me/*, auth routes, or any non-OpenClaw route directly from the model.scripts/, stop and update/add a script first instead of improvising a direct API call.scripts/ instead of hand-writing HTTP requests.http://easyclaw.bar/shuziren/user/.cron in isolated mode and returns NO_REPLY while the task is still unfinished, so the user is only notified on completion or failure.train_digital_human.py, train_voice.py, and synthesize_talking_video.py, never append --no-watch-task to the command.schedule_task_watch.py now prefers the native EasyClaw/OpenClaw CLI form cron create --thread when available, and only falls back to legacy cron add for older clients.job_id.get_task.py --sync as a substitute for scheduled notification. get_task.py --sync is only for one-time manual status checks.job_id, tell the user the task is queued and you will notify them when it completes.job_id, tell the user task submission succeeded but automatic notification was not armed.job_id.add_compliance_watermark or compliance_watermark_position unless the user explicitly asks for the watermark.voice_id is optional. The platform API can auto-resolve the bound voice from the digital human's audio_man_id.id as subtitle_font_type.subtitle_font_type is omitted, the platform defaults it to 思源宋体 CN when available.subtitle_border_width is omitted, the platform defaults it to 2.subtitle_* in the platform API, and the backend maps them to Chanjing upstream keys like font_id, color, stroke_color, stroke_width, and subtitles._openclaw_media when present. Fall back to raw fields such as cover_url, preview_image_url, avatar_url, image_url, poster_url, thumbnail_url, thumb_url, and pic_url..video_url or preview_url, include the direct URL prominently and show the cover image inline when available.scripts/train_digital_human.py, scripts/train_voice.py, and scripts/synthesize_talking_video.py, prefer the top-level submission object. submission.watch_command is for observability; the script should already have attempted watcher creation before it exits.For digital human training, voice training, and talking-head video synthesis:
scripts/.submission.task_id, submission.watcher_status, and submission.watcher_job_id from the final script output.completion.finished is true, prefer the completed result from the same run.submission.watcher_status is scheduled and submission.watcher_job_id is non-empty, tell the user automatic notification is armed for the timeout case.Do not invent notification promises without a confirmed cron job_id.
Required:
nametraining_video_file_idOptional:
callback_urlerror_skipextra_payloadRequired:
nametraining_audio_urlOptional:
callback_urlextra_payloadAlways required:
titledigital_human_idAudio source, choose one mode:
scriptaudio_file, audio_file_id, or audio_urlOptional common fields:
voice_idbackground_filebackground_file_idbackground_urlvideo_widthvideo_heightcallback_urlextra_payloadOptional subtitle fields:
subtitle_showsubtitle_font_typesubtitle_font_sizesubtitle_font_colorsubtitle_border_colorsubtitle_border_widthsubtitle_xsubtitle_ysubtitle_widthsubtitle_heightsubtitle_asr_typesubtitle_items_jsonOptional rendering fields:
modelresolution_rateadd_compliance_watermarkcompliance_watermark_positionscripts/list_public_digital_humans.pyscripts/list_public_voices.pyscripts/list_fonts.pyscripts/list_my_digital_humans.pyscripts/list_my_voices.pyscripts/train_digital_human.pyscripts/train_voice.pyscripts/synthesize_talking_video.pyscripts/get_task.pyscripts/schedule_task_watch.pyscripts/cron_watch_task.pyList fonts:
python "{baseDir}/scripts/list_fonts.py"
Train a digital human:
python "{baseDir}/scripts/train_digital_human.py" --name "Brand Host" --video-file-id "file_xxx"
Synthesize with only required fields in TTS mode:
python "{baseDir}/scripts/synthesize_talking_video.py" --title "Demo" --digital-human-id "human_xxx" --script "hello"
Synthesize with subtitle font:
python "{baseDir}/scripts/synthesize_talking_video.py" --title "Demo" --digital-human-id "human_xxx" --script "hello" --subtitle-show --subtitle-font-type "103"
Synthesize with local audio:
python "{baseDir}/scripts/synthesize_talking_video.py" --title "Demo" --digital-human-id "human_xxx" --audio-file "C:\path\audio.wav"