Nodes/KIE.ai Nodes Next/happyhorse/video-edit
ComfyUI Node

happyhorse/video-edit

Restyle footage you already have

By felipederosilva·Created about a month ago·Updated a day ago· 3
happyhorse/video-edit
  • video_url
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄promptMake the horse-headed humanoid character in the video wear the striped sweater from the image►
◄reference_image [ "https://loremflickr.com/400/400?lock=3320229742640740", "https://loremflickr.com/400/400?lock=390084853871038", "https://loremflickr.com/400/400?lock=4205160298467577", "https://loremflickr.com/400/400?lock=7626507781317900", "https://loremflickr.com/400/400?lock=2804855355708229" ]►
◄resolution1080p►
◄audio_settingauto►
◄seed1764574909►
◄timeout_seconds1200►
◄callback_url►

Most nodes in this pack generate something out of nothing. This one edits footage: hand it a VIDEO and an instruction, and it returns a video with that change applied. "Make the horse-headed humanoid character wear the striped sweater from the image" is the vendor's own example, which tells you how specific the instructions are meant to be.

This is the pipeline you want when you've already shot or generated a clip and need one thing changed without regenerating the whole thing. The equivalent local move is a video-to-video pass on Wan - viable, slower, and requires the weights. Here it's one call.

Inputs

video_url (required) is a real VIDEO socket. The pack renders it to a temp MP4 and uploads it to KIE - KIE's docs for this family accept MP4 and QuickTime, up to 100MB. That size ceiling is the practical limit: a long 1080p clip can exceed it, so trim before you send.

prompt (required) is the edit instruction. KIE calls it "style transfer / local replacement" language and caps it at 5000 non-Chinese characters (2500 Chinese). One clear change per call beats a paragraph of changes - remixing several edits at once is where these models start freelancing.

**reference_image ** is optional and, yes, its name really does end in a space. It's a STRING containing a JSON list of 0–5 image URLs, so it's not a socket you can wire an image into:

[
  "https://example.com/sweater.jpg"
]

Documented limits: JPEG/JPG/PNG/WEBP, both width and height at least 300px, aspect ratio between 1:2.5 and 2.5:1, up to 10MB each. You'd use it to say "use this object/style" - the sweater in the vendor's example is exactly that pattern.

resolution is 1080p (default) or 720p. audio_setting is auto or origin: auto lets the model handle the audio track, origin keeps the source audio as-is. If the clip's existing dialogue or music matters, origin is the safe choice - otherwise a restyle can come back with replaced or dropped audio.

seed (0–2147483647) is there for reproducibility attempts. timeout_seconds defaults to 1200; callback_url stays empty unless you're wiring webhooks.

Outputs

video gives you the edited clip as a native VIDEO. url and all_urls_json hold result links, task_id identifies the KIE job, raw_json is the provider's full response, and credits_consumed / credits_left are floats. Results are archived in ComfyUI/output/KIE-Results/videos/, which matters more here than elsewhere - the source footage was your input, so you can re-edit from disk rather than re-uploading.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt

Restart ComfyUI after cloning. requests, Pillow, numpy, PyYAML - no model downloads, because HappyHorse never shipped weights (the "open source?" hype in April 2026 was followed by fake repos, not files). dist/ has the Windows one-click installer.

Key: Settings → KIE.ai Nodes Next → Connection, paste once, validated before saving, masked afterwards. KIE_API_KEY for servers, and it overrides the saved key.

Things that bite

Upload size. KIE caps video input at 100MB for this family. Long or high-bitrate clips fail at upload, before the model sees them. Cut first.

auto audio surprises people. The default changes the audio track; if you wanted the original sound preserved, set origin and re-run rather than editing the returned file by hand.

The reference-image field takes URLs, not images. There's no socket for it. Use a public URL or the pack's upload utility to get one; a Load Image into this node is not a thing that works.

Editing repeatedly degrades the clip. Edit-of-an-edit compounds artifacts the same way iterative instruction-editing does on images. Go back to the source video rather than chaining.

Timeout means the task is still running remotely and already billed. Copy the task_id from the error and poll it with the Task Status node.

CategoryKIE Next/Video/HappyHorse

Inputs (8)

NameTypeDefaultDescription
promptSTRINGMake the horse-headed humanoid character in the video wear the striped sweater from the imageRequired edit instruction describing the intended change (e.g., style transfer / local replacement). Max 5,000 non‑Chinese characters or 2,500 Chinese characters; extra content is truncated.
video_urlVIDEO—
reference_image optSTRING[ "https://loremflickr.com/400/400?lock=3320229742640740", "https://loremflickr.com/400/400?lock=390084853871038", "https://loremflickr.com/400/400?lock=4205160298467577", "https://loremflickr.com/400/400?lock=7626507781317900", "https://loremflickr.com/400/400?lock=2804855355708229" ]Optional reference image URL list (0–5). Image requirements: Format: JPEG, JPG, PNG, WEBP. Resolution: both width and height must be at least 300 px. Aspect ratio: 1:2.5–2.5:1. File size: up to 10 MB.
resolutionoptCOMBO1080pOutput video resolution. Valid values: 720P, 1080P (default).
audio_settingoptCOMBOautoAudio handling strategy for the output video.
seedoptINT17645749090–2147483647Random seed for reproducibility (if supported).
timeout_secondsoptINT120030–7200—
callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

Outputs (7)

NameTypeDescription
videoVIDEO—
urlSTRING—
all_urls_jsonSTRING—
task_idSTRING—
raw_jsonSTRING—
credits_consumedFLOAT—
credits_leftFLOAT—