Nodes/comfyui-budgetpixel/DreamActor M2.0 (BudgetPixel)
ComfyUI Node

DreamActor M2.0 (BudgetPixel)

Put your character's face on someone else's performance

By budgetpixel-ai·Created about 17 hours ago·Updated about 12 hours ago· 3
DreamActor M2.0 (BudgetPixel)
  • image
  • video
  • video
trim_introtrue
force_rerunfalse

This is the "act this out for me" node. Give it a still image of a character and a reference video of someone performing - talking, gesturing, emoting - and DreamActor M2.0 (BytePlus's motion-transfer model) drives the character through that performance. Your subject keeps its own identity and background; only the motion, facial expressions, and lip movements come from the reference video. It works for real people, animation, and pets, which is a broader range than most of its genre covers, and it's the tool people reach for when they want a talking head that actually moves like a real one instead of a looped idle animation.

The billing is the thing to notice before you get excited: 50 credits per second of the reference video. A 10-second reference clip is 500 credits, so the cost scales with how long the performance is, not how long you want the output to be. Budget accordingly.

How it works

It's a BudgetPixel API node, so the actual model lives on BytePlus's servers, not your machine. Your character IMAGE and reference VIDEO are uploaded (video always goes through POST /v1/uploads - the API requires a URL for it), a motion-control job is created, and the node polls the /motion-control/{id} endpoint until succeeded, then downloads the 720p MP4 back into the graph as a core VIDEO value. Nothing in this pipeline runs locally, which means no VRAM - but also means your character image and reference video leave your machine.

The inputs that matter

Both required inputs are the two things in the description: image (the character to animate, jpg/png up to 4.7 MB, 480×480 to 1920×1080 - larger gets scaled down) and video (mp4/webm, 3–30 seconds, up to 30 MB, and the motion source).

Two optional toggles:

  • trim_intro (default true) - trims the ~1-second transition at the start of the output. Leave it on; the intro is the part where the model is still "warming up" into the reference motion.
  • force_rerun (default false) - the pack-wide "ignore the cache and actually re-run, re-spending credits" switch.

The output is a single VIDEO, which wires straight into Save Video or a frame-extraction node. You'll need a recent ComfyUI (2025+) for the video type.

Install

Same pack, same routine - ComfyUI Manager (search "BudgetPixel") or:

cd ComfyUI/custom_nodes
git clone https://github.com/budgetpixel-ai/comfyui-budgetpixel.git
pip install -r comfyui-budgetpixel/requirements.txt

Restart, then set BUDGETPIXEL_API_KEY (or budgetpixel.json with {"api_key": "bpx_live_..."} in the pack folder). No local model, no GPU - the only real dependency is the requests library.

Where people get burned

The two classic failures are both about the reference video. First, duration: keep it in the 3–30 second band and under 30 MB, because the cost is per second - long references are where a "quick test" becomes an expensive one. Second, resolution of the character image: the tooltip is explicit that larger images get scaled down, so feeding a 4K render expecting crisp output is wasted effort - 1080p-ish is the sweet spot. And a practical tip from the motion-transfer genre in general: a reference with clear, broad motion (turn the head, change expression, talk) gives the model something to actually transfer; a subtle performance produces a subtly moving character you may have paid a lot of credits for.

CategoryBudgetPixel/Motion Control

Inputs (4)

NameTypeDefaultDescription
imageIMAGECharacter image to animate (the subject). A public image URL, a data URI, raw base64, or an uploaded-file URL from POST /v1/uploads. jpg/png, max 4.7 MB; 480x480 to 1920x1080 (larger images are scaled down).
videoVIDEOMotion reference video whose movement drives the character. A public video URL or an uploaded-file URL from POST /v1/uploads. mp4/webm, 3-30 seconds, up to 30 MB.
trim_introoptBOOLEANtrueTrim the 1-second transition at the start of the output video.
force_rerunoptBOOLEANfalse

Outputs (1)

NameTypeDescription
videoVIDEO