@visionengine/digital-human
v1.0.0
Published
VisionEngine Digital Human MCP Server - avatar clone / voice clone / avatar lipsync via backend proxy
Maintainers
Readme
VE Digital Human MCP
MCP server covering the full digital-human chain via the ve-backend proxy:
clone (real-person speaking video → avatar with extracted reference voice + transcript),
voice synthesis (text → wav in the cloned voice), and
avatar lipsync (driving video + audio → talking-head MP4).
Environment
API_URL: backend API root, defaulthttps://api.visionengine-tech.com/api/v1API_KEY: user API key from VisionEngine backend (required for submit/query and remote upload)WORKDIR: local workspace root, default./DEFAULT_OUTPUT_DIR: default relative output directory, defaultpublic/videosFILE_MODE: local file handling mode,localorremote, defaultremoteREMOTION_WORK_DIR: shared mount root used inlocalmode, default/vecBASE_URL: backend public base url used for/saveand/sharedlinks, defaulthttps://api.visionengine-tech.comREMOTE_VIDEO_UPLOAD_PATH: remote upload path for local videos inremotemode, defaultpublic/videosREMOTE_AUDIO_UPLOAD_PATH: remote upload path for local audios inremotemode, defaultpublic/audios
Tools
Six tools in three stages. Tools never poll internally: after a submit, call the matching query tool, wait the suggested interval, and query again until a terminal status.
| Stage | Submit | Query |
| ----------------------------- | ---------------- | --------------- |
| Clone (avatar-prep) | clone_submit | clone_query |
| Voice synthesis (voice-clone) | voice_submit | voice_query |
| Avatar lipsync | lipsync_submit | lipsync_query |
Typical chain (cloned voice, talking-head video)
clone_submitwith a real-person speaking video (local file / URL / storage path) →avatarId. Free of charge; background voice extraction + transcript generation.- Poll
clone_queryuntilstatus: "ready". The result carriesavatar.audioUrl(freshly signed ~1-hour reference audio URL),avatar.referenceAudioText(word-for-word transcript), andavatar.videoPath/avatar.audioPath(uid-prefixed storage paths that never expire). voice_submitwithtext,promptAudioUrl: avatar.audioUrl,promptText: avatar.referenceAudioText. Charged up front per-10k-chars; refunded automatically on failure.- Poll
voice_queryuntilSUCCEEDED. It downloads the wav by default and returnsresultStoragePath(never expires) plusresultUrl(~1 hour, re-query to refresh). lipsync_submitwithvideoPath: avatar.videoPathandaudioPath: <voice resultStoragePath>. 500 credits pre-charged, settled per output second (difference refunded/charged).- Poll
lipsync_queryuntilSUCCEEDED. It downloads the MP4 by default; expectbillingStatus: "settled".
Media input kinds
Every media parameter (videoPath, audioPath, promptAudioUrl) accepts, in order of detection:
- http(s) URL — passed through as-is (including
/shared/...?download=truelinks produced by this server). - existing local file path — handled by
FILE_MODE:local: the path is rewritten to a/shareddownload URL after removing theREMOTION_WORK_DIRprefix.remote(default): the file is uploaded through the backend/saveendpoint and submitted as a/sharedURL.
- uid-prefixed Supabase storage path — any string that is neither a URL nor an existing local file is
passed through verbatim as a storage-path reference (e.g.
avatar.videoPathor a voice resultresultStoragePath). Ownership is enforced by the backend; pass chain-produced paths exactly as returned.
promptAudioUrl only accepts http(s) URLs or local files (voice-clone requires a plain URL);
to reuse a cloned voice, pass the avatar.audioUrl from clone_query.
Upstream constraints
- Clone driving video: one person speaking clearly, >=8s recommended (>=720p), <=200MB recommended (mirror hard cap 2GB), mp4/mov/webm. Free stage.
- Voice synthesis:
text<=3000 characters; reference audio wav/mp3/flac/m4a (24kHz mono wav ideal); output 24kHz mono wav; wait up to ~25 minutes worst case (cold start included). - Lipsync driving video: same constraints as clone. Audio: wav/mp3/flac/m4a, keep well under 30 minutes. Output: H.264+AAC MP4 at the driving video resolution. Duration: tens of seconds to ~8 minutes; first request after idle may include a cold start; stale tasks auto-fail and refund after 2 hours.
Result URLs
Result URLs are signed on every query and valid ~1 hour — re-run the query tool to refresh.
Local downloads (default on for voice_query / lipsync_query) land in DEFAULT_OUTPUT_DIR
(public/videos) relative to WORKDIR unless an outputPath is given.
