๐ฑ Seedance 2.0 Consistent Character Video
Keep the same character from shot to shot
- sheet_image
- scene_image_2
- scene_image_3
- video_url
- first_frame
- request_id
- batch_json
Character consistency is the eternal problem in this hobby: generate a character once, then watch every subsequent generation quietly replace their face with someone else's cousin. Local workflows fight this with LoRAs, face adapters and IP-Adapter stacks. Seedance 2.0 Consistent Character Video is the cloud answer: give Seedance one reference image of your character and it does its best to keep that person through the whole clip - no local adapter training required.
The trick that makes this usable across multiple shots is the sheet_image / sheet_url design. A character sheet is a reference image of your character that you reuse everywhere. Wire it in once, and every scene you generate from it should carry the same face, the same costume, the same vibe. That's the workflow pattern the KB calls out for the modern era: generate the character once, then keep referencing that artifact instead of re-inventing it per shot.
The inputs that matter
sheet_image- IMAGE, typically fromLoad Image. This is your character reference and it automatically becomes@image1in the prompt.sheet_url- STRING fallback: paste a public image URL or BytePlusasset://reference if you don't have the tensor handy. Use one or the other, not both.scene_image_2,scene_image_3- optional extra scene/background images, referenced as@image2and@image3.prompt- the scene description, defaulting to "@image1 walks through a sunlit garden, cinematic motion, 4K". Referencing@image1is what ties the sheet into the action.aspect_ratio,resolution(480pโ4k, endpoint-dependent),duration(4โ15s),seed,batch_count.
If you don't wire a sheet, the node errors out with a message telling you to connect sheet_image or paste sheet_url - there's no silent "just guess a character" mode, which is honestly the right behavior.
How it works
The sheet goes into the request as the first reference image, so it anchors the identity; the scene images follow as secondary references; the prompt's @imageN tokens get resolved against them. Then the usual BytePlus cycle: submit, poll, return video_url (short-lived, save within ~24h), first_frame, request_id, batch_json.
The honest caveat
"Consistent" is doing a lot of work in this node's name. Seedance's identity handling from a single sheet is decent - dramatically better than nothing - but it's not a trained LoRA. Expect consistency that holds up across clips when the character is doing similar things in similar lighting, and drift when you push into very different scenes or camera angles. Generate a few variants and pick; that's normal with this class of tool.
Also be careful about what's in the sheet. BytePlus moderation on reference material with identifiable real people is aggressive - community reports of the InputImageSensitiveContentDetected.PrivacyInformation error are common with real faces. A synthetically generated character sheet passes cleanly and is exactly what this node is designed for.
Install: ComfyUI Manager โ Install via Git URL โ https://github.com/nnnnkatsu/seedance2-comfyui-byteplus, restart. No models, no GPU - you're renting ByteDance's render farm per clip.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | @image1 walks through a sunlit garden, cinematic motion, 4K | โ |
| aspect_ratio | COMBO | 16:9 | 7 options: smart, 16:9, 9:16, 4:3, 3:4, 21:9, +1 |
| resolution | COMBO | 480p | BytePlus output resolution. 1080p/4k availability depends on the selected endpoint. |
| duration | INT | 54โ15 | โ |
| seed | INT | -1-1โ4294967295 | โ |
| batch_count | INT | 11โ10 | Create multiple tasks with different seeds. Cost and wait time scale with this count. |
| api_keyopt | STRING | โ | |
| endpointopt | STRING | BytePlus ModelArk endpoint ID, for example ep-... | |
| generate_audioopt | BOOLEAN | true | โ |
| sheet_imageopt | IMAGE | โ | |
| sheet_urlopt | STRING | โ | |
| scene_image_2opt | IMAGE | โ | |
| scene_image_3opt | IMAGE | โ |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | โ |
| first_frame | IMAGE | โ |
| request_id | STRING | โ |
| batch_json | STRING | โ |