ComfyUI-Happyhorse-Wrapper Video Edit
Re-render an existing clip, not a prompt
- reference_images
- video_url
- task_id
Every other node in this pack starts from nothing - a prompt or a still. Video Edit starts from a video you already have and asks HappyHorse to re-render it to match a new description. Change the scene, restyle it, replace what's in frame while keeping the motion. It's the vid2vid node of the family, and it's the one that feels like cheating when it works.
It's still a cloud call - same async-task pattern, same polling, same temporary URL on the way out. The interesting bit is what's on the way in: this is the only node in the pack whose primary input is a string, because HappyHorse requires your source clip as a public URL.
The inputs that matter
- video_url - the source clip as an HTTP/HTTPS URL, e.g. a public MP4 or MOV link. This is the gotcha: it must be a URL the model service can fetch, not a local file path and not a ComfyUI
IMAGE. If you have a local clip, you need to host it somewhere reachable (a bucket, a CDN, whatever the service can actually hit) and paste that in. - prompt - multiline, describes the edit: "turn the daytime street into night, add rain."
- resolution -
720Por1080P. - audio_setting -
autoororigin.originkeeps the source clip's audio track;autolets HappyHorse generate its own. This matters more here than anywhere else in the pack, because native multi-language audio is HappyHorse's headline feature - it's one of very few models that generates speech synced to the video. - watermark - on by default.
- seed -
-1or pinned. - reference_images (optional) - an
IMAGEbatch, up to 5, to keep characters consistent while the scene changes. Same character-order logic as the Reference To Video node: batch order maps tocharacter1,character2… in your prompt.
How it works
The node builds a media list starting with your video URL typed as video, appends any reference images (uploaded as PNGs to OSS or tmpfiles.org), and sends it all to the happyhorse-1.0-video-edit model. It creates the task, polls until render completes, and returns video_url and task_id. The output URL expires, so wire it into the pack's Preview Video node to save the result as an MP4 in your output folder before it lapses.
Install and setup
Same install as the rest of the pack - one clone, five nodes. ComfyUI Manager → search "ComfyUI-Happyhorse-Wrapper", or:
cd ComfyUI/custom_nodes
git clone https://github.com/magicwang1111/ComfyUI-Happyhorse-Wrapper
python -m pip install -r requirements.txt
Configure config.local.json (or DASHSCOPE_API_KEY env var) with your api_key and endpoint. No model downloads.
Where people get burned
- "video_url is required" when you've definitely provided a file - it needs a URL, not a path. Host the clip.
- Tasks failing with a media error - the service couldn't fetch your URL, or the file's behind an auth wall it won't pass. Make it public.
- Audio doing the wrong thing - check
audio_setting. If the source has a track you want preserved, set it toorigin;autoregenerates it. - Upload flakiness on the reference images - the tmpfiles.org fallback can be unreachable from Alibaba's side; configure OSS in the pack's
.envif you keep hitting it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| video_url | STRING | — | |
| prompt | STRING | — | |
| resolution | COMBO | 1080P | 2 options: 720P, 1080P |
| watermark | BOOLEAN | true | — |
| audio_setting | COMBO | auto | 2 options: auto, origin |
| seed | INT | -1-1–2147483647 | — |
| reference_imagesopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| task_id | STRING | — |