Animate 角色动作迁移
One photo, one dance clip, no prompt
- input_image
- input_video
- api_config
- video
- video_url
- task_id
- response
What this node actually is
There is no prompt box. That's the first thing everyone notices, and it's correct: you feed this node a character image and a motion video, and it gives you back a video of that character doing that motion. Nothing to type.
Locally, that job belongs to Wan 2.2 Animate, SCAIL-2 or Wan-Move. They work, and they're heavy - SCAIL-2 on a 4070 Ti is roughly 5–6 minutes for 81 frames, and a 5060 Ti 16GB ran 10 seconds of 360p in about 14 minutes, with the same complaints every time: face drift, body morphing, identity loss past 81 frames. This node is the hosted shortcut, and your GPU does the PNG encoding and nothing else.
That buys a result in about the time one API call takes, on any machine, including one with no discrete GPU. It costs per call, and both your character photo and your driving clip leave your machine for a third-party service - the standard trade in external-api-nodes.md.
How it works
The node is a thin client for one hosted model, animate-motion-transfer:
- Your local
input_imagebecomes PNG and yourinput_videobecomes bytes; both are uploaded. If you already filledimage_url/video_urlwith public links, the upload is skipped - the only real reason those two string fields exist. - It posts
{model, images: [character_url], metadata: {video_url: [motion_url], resolution, ratio, frame_rate, pose_method}}to the pack's gateway. - It polls until the task finishes, then downloads the MP4 as a normal ComfyUI
VIDEO.
Pose extraction happens server-side, and pose_method picks the estimator (vitpose, sdpose, wuwupose). Funny thing: that intermediate skeleton is exactly what SCAIL-2 deliberately dropped, arguing a stick figure throws away depth and contact before the model sees them. vitpose is the default and the sane start; wuwupose has no footprint anywhere I could find, so try it and look.
Two bits of restraint worth knowing: only toggles you actually change get sent, and seed is cache-only - the model has no documented seed parameter, so it just controls whether ComfyUI reuses the last clip.
The inputs that matter
input_imageorimage_url- exactly one. Not both. Not a batch. The node validates this and will refuse a batch of two images.input_videoorvideo_url- exactly one. Same rule.resolution-480p,720p(default),1080p. At 1080p there's a hard cap:max_framescannot exceedframe_rate × 10, so ten seconds at 30fps. Longer clips need a lower resolution.max_frames-0means "whatever the API decides". Set a number to trim a long driving clip.ratio-adaptiveby default (follows your inputs), or a fixed ratio like16:9, orcustompluscustom_ratioinwidth:heightform.pose_strength,expression_strength,chest_motion_strength- the personality knobs, defaulting to 1.0, 0.8 and 0.2. Droppose_strengthwhen the output looks puppeted rather than acted.skip_error- returns a placeholder video instead of killing the run.
Outputs are the pack's standard four: video (the local file - wire it to SaveVideo), video_url, task_id, and response for when something looks off and you want the raw JSON.
Install
ComfyUI Manager: search ComfyUI Seedance or seedance. Or:
comfy node install seedance
Manual, if you prefer:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/ComfyUI_Seedance.git
cd ..
python -m pip install -r custom_nodes/ComfyUI_Seedance/requirements.txt
That requirements file is one line - requests>=2.28. No model downloads, no CUDA anything. Restart ComfyUI and the nodes appear under Seedance.
Then you need a key, because nothing here runs locally. Add a Seedance API Config node with base_url set to https://api.seedance.nz and your token in api_key, and wire its api_config output in. Or set SEEDANCE_API_KEY, or drop a config/.env in the plugin folder. The examples folder ships animate-motion-transfer本地素材.json and animate-motion-transfer网址素材.json with the key deliberately blank.
Where people get burned
The key. Most "it doesn't work" reports are an empty key or a prompt pasted into api_key; the pack checks for ASCII and an sk- prefix and complains. The path. The plugin must sit at ComfyUI/custom_nodes/ComfyUI_Seedance - a renamed folder is the classic silent failure. TLS. Behind a corporate proxy or on a portable Windows build with a broken cert store, pip install -U requests certifi or point SEEDANCE_CA_BUNDLE at a CA file. Don't leave SEEDANCE_SSL_VERIFY=0 on. Expiring links. Result URLs are temporary; save what you want to keep.
And the honest caveat about this pack: the author runs an affiliate API shop, the README is partly a storefront, and seedance.nz has no Reddit footprint at all. It's a legitimately published pack on the Comfy Registry, but it's a reseller front-end. If you don't want reference photos of real people going through it, use the local models.
When to reach for it
Bring a character shot and a short driving clip, leave the prompt blank, keep pose_method on vitpose and resolution on 720p, and see what comes back before touching the other knobs. It's the fastest way to find out whether motion transfer suits the shot at all.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | STRING | Character image URL; leave empty for input_image | 角色图片 URL;连接本地图时留空。 | |
| video_url | STRING | Motion video URL; leave empty for input_video | 动作视频 URL;连接本地视频时留空。 | |
| resolution | COMBO | 720p | 3 options: 480p, 720p, 1080p |
| ratio | COMBO | adaptive | 10 options: adaptive, 1:1, 2:3, 3:2, 3:4, 4:3, +4 |
| custom_ratio | STRING | 16:9 | Used only with custom ratio, positive width:height | 仅自定义画幅时使用。 |
| frame_rate | INT | 301–999999 | — |
| max_frames | INT | 00–999999 | 0 uses API default; 1080p permits at most frame_rate x 10 | 0 使用接口默认值;1080p 最多 10 秒。 |
| skip_frames | INT | 00–999999 | — |
| pose_method | COMBO | vitpose | 3 options: vitpose, sdpose, wuwupose |
| normal_mode | BOOLEAN | true | — |
| neck_correction | BOOLEAN | false | — |
| pose_strength | FLOAT | 1.00 | — |
| camera_motion | BOOLEAN | false | — |
| camera_strength | FLOAT | 1.00 | — |
| mask_mode | BOOLEAN | false | — |
| expression_strength | FLOAT | 0.80 | — |
| chest_motion_strength | FLOAT | 0.20 | — |
| input_imageopt | IMAGE | One local character image | 一张本地角色图。 | |
| input_videoopt | VIDEO | One local motion reference video | 一条本地动作参考视频。 | |
| api_configopt | SEEDANCE_CONFIG | Connect Seedance API Config or use SEEDANCE_API_KEY. | |
| skip_erroropt | BOOLEAN | false | Return a placeholder on failure | 出错时输出占位视频。 |
| seedopt | INT | 00–18446744073709550000 | ComfyUI cache seed. Fixed reuses the cached result while all other inputs stay unchanged; randomize/increment/decrement starts a new execution. This value is not sent to models without documented seed support. | ComfyUI 缓存种子;Fixed 在其他输入不变时复用缓存,随机、递增或递减会触发新任务。未声明支持 seed 的模型不会收到此参数。 |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_url | STRING | — |
| task_id | STRING | — |
| response | STRING | — |