Nodes/comfyui-magic-hour/Magic Hour: Character Replace
ComfyUI Node

Magic Hour: Character Replace

Swap the person in a video, or animate your character with their motion

By magichourhq·Created about 17 hours ago·Updated about 16 hours ago· 0
Magic Hour: Character Replace
  • video
  • character_image
  • video
  • video_path
  • credits_charged
◄modereplace►
◄modelwan-animate►
◄resolution720p►
◄start_seconds0.0►
◄end_seconds0.0►

Character Replace is the most interesting node in this pack, because it names its models. wan-animate and kling-3.0 are both tools the community knows by name, and what this node is really selling is a hosted run of the first one and access to the second one that you cannot have any other way.

The two modes, which are genuinely different jobs

replace takes the person in your video and puts your character_image in their place, keeping the motion. Their walk, their gestures, their head turns - your character's face and clothing, moving through them.

animate flips the emphasis: it animates your character using the video's motion. The output is your character performing the performance.

Same two inputs, opposite intent, and the difference matters when you're prompting or choosing a reference image. For replacement you want a character whose body shape roughly matches the actor's; for animation you can be looser, because it's your image being driven rather than substituted.

The models

wan-animate runs at 480p or 720p. This is Wan 2.2 Animate, and here's the part worth knowing: those weights are open and Apache 2.0. You can run Animate-14B locally in ComfyUI with VACE and per-frame control. So the case for paying for it is convenience - a 14B video model is not a small local ask, and the KB's Wan doc notes that everything after 2.2 in the numbered flagship series is API-only. If your card can't hold Animate, this is the door.

kling-3.0 runs at 720p or 1080p and is cloud-only, full stop. No weights, no local option, at any VRAM.

And there's a third option the node doesn't name but you should: SCAIL-2, Z.ai's Apache 2.0 motion-transfer model, dropped the pose skeleton entirely and is the current local default over Wan 2.2 Animate for exactly this task. If you have the hardware, it's the better open answer to "transfer this motion to my character". The hosted route is still simpler.

The one thing this node does better than most

It validates the model/resolution pairing locally, before spending anything:

ValueError: kling-3.0 supports ['1080p', '720p'], not 480p.

That's the kind of guard most API wrappers don't bother with - you find out about the bad combination after the upload. Here you find out instantly and for free. Respect.

Inputs and outputs

Required: video (drives everything), character_image (your character), mode (replace / animate), model (wan-animate / kling-3.0), resolution (720p / 480p / 1080p, filtered by model), start_seconds, end_seconds.

The window behaves as everywhere in this pack: end_seconds at 0 means to the end of the clip. If you only need a ten-second segment of a two-minute source, set both ends explicitly - it's the single biggest lever on cost.

Outputs: video (a real VIDEO, so Save Video or Preview just work), video_path (STRING with the saved MP4), credits_charged (INT - video is where this number gets uncomfortable, so watch it).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/magichourhq/comfyui-magic-hour
pip install -r comfyui-magic-hour/requirements.txt

Restart. Dependencies: the magic-hour SDK (>=0.87.1) and nothing else - no model download, because the models aren't on your machine. You need a ComfyUI new enough to have the VIDEO type. ComfyUI Manager users can search "Magic Hour".

export MAGIC_HOUR_API_KEY=your_key_here

before launching, or a bare key in comfyui-magic-hour/api_key.txt. Not a widget, by design.

Where it falls over

Your character's proportions. Replacement keeps the driver's silhouette, so a tall actor and a short character means one of them is going to look wrong. Match body types where you can.

Fast or occluded motion. Hands in front of faces, people leaving frame, quick turns - motion transfer models hate all of it, hosted or local. Test the hardest ten seconds before committing to the whole clip.

Long clips. Every second is billed, and the job time grows with it. Cut first, generate second.

The synchronous wait. Minutes, not seconds, and your queue is blocked the whole time. Don't queue a batch of these and expect to keep working.

Bottom line: if you have the GPU, local Wan Animate or SCAIL-2 is free and the iteration loop is much faster. If you don't, or if you need Kling's 1080p output, this node is the pragmatic answer - just keep the window tight and the first test at 480p.

CategoryMagic Hour

Inputs (7)

NameTypeDefaultDescription
videoVIDEO—
character_imageIMAGE—
modeCOMBOreplace2 options: replace, animate
modelCOMBOwan-animate2 options: wan-animate, kling-3.0
resolutionCOMBO720p3 options: 720p, 480p, 1080p
start_secondsFLOAT0.00–3600—
end_secondsFLOAT0.00–36000 = to the end of the video

Outputs (3)

NameTypeDescription
videoVIDEO—
video_pathSTRING—
credits_chargedINT—