Magic Hour: AI Video Editor
Edit a Video by Typing at It — Magic Hour's AI Video Editor, in Your Graph
- video
- video
- video_path
- credits_charged
There's a specific kind of annoyance that this node exists to delete: you've got a clip you already like, and the one thing wrong with it is something you'd need Resolve, After Effects, and an afternoon to fix. Change the weather. Take the logo off the wall. Make it look like it was shot at dusk. The AI Video Editor node takes a VIDEO plus a text prompt and hands you back an edited clip.
It's the most "describe the outcome and hope" node in the pack. No motion brush, no mask, no keyframes - just a sentence and a time window.
What's actually happening
This is an API node, not a model on your disk. Nothing loads into VRAM. The node converts your clip to a temp MP4, uploads it, calls Magic Hour's ai_video_editor endpoint, and blocks while the job runs on their servers - polling every three seconds - then downloads the result into ComfyUI/output/magic_hour/ and hands it back as a VIDEO.
That puts it squarely in the category the KB calls API-wrapper nodes: the right tool for something you genuinely can't run locally, metered per call, with your footage leaving the machine. The counterweight is that the pack is written by the vendor itself - Magic Hour's own repo, Apache-2.0, PublisherId = "magichour" in its pyproject.toml. That matters: a random ComfyUI-something-API pack holds your key and phones home by design, and that's exactly the shape of the one that shipped malware. A first-party pack is the version of this pattern you can install without reading every line.
The inputs worth touching
Five fields, and only two of them are interesting.
video is the clip. Anything that produces a ComfyUI VIDEO works - Load Video, or the output of a local generation if you want to edit something you just made.
prompt is the edit, in plain language. This is the whole interface. Be concrete about the change and about what should stay put; "make the whole thing cinematic" gets you a vibes remix, "remove the people in the background, keep the camera motion" gets you an edit.
model picks the engine behind the edit - default, gemini-omni, gemini-omni-1.1, ltx-2.3, ltx-2.5. The list is read live from the installed Magic Hour SDK, which is why it looks like a roll call of recent video models. LTX-2.3 is Lightricks' 22B open-weights video model - the one that made "fast and good enough on consumer hardware" respectable in early 2026 - but here you're not running those weights, you're renting the hosted version. Leave it on default until you have a reason: the vendor's default is the combination their API expects to work on every plan.
resolution is 720p, 480p or 1080p. This is your cost dial, and 480p is the sane setting for a first pass on anything longer than a few seconds. start_seconds and end_seconds cut the window that gets edited; end_seconds defaults to 0, which the author's tooltip defines as "to the end of the clip."
Outputs
Three, and the second one is the quietly useful one. video is the result as a ComfyUI VIDEO - wire it to Save Video or a preview. video_path is the file on disk (output/magic_hour/…mp4), which is your escape hatch if your ComfyUI build can't wrap files as VIDEO. credits_charged is an INT: the actual spend for that run, which you can log or just eyeball.
Install
Search "Magic Hour" in ComfyUI Manager, or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/magichourhq/comfyui-magic-hour
pip install -r comfyui-magic-hour/requirements.txt
The only dependency is the magic-hour SDK (>=0.87.1), plus Python 3.10 or newer. Restart ComfyUI and the nodes appear under Magic Hour.
Then give it a key, before ComfyUI starts - either export MAGIC_HOUR_API_KEY=... or a file api_key.txt inside the pack folder:
echo 'YOUR_KEY' > ComfyUI/custom_nodes/comfyui-magic-hour/api_key.txt
The key is deliberately not a node field, because widget values get saved into workflow JSON and leak the moment you share the graph. That's a good design choice and you should respect it - don't paste your key into a note node either.
Where people get burned
The error messages are actually good, so read them. The pack translates API failures into plain text: 401 means the key is wrong or was deleted, 402 means credits or a paid plan (a 1080p run is a classic way to hit it), and 422 means the model/resolution combination you picked isn't supported - try default and 720p.
end_seconds = 0 can fail on a clip whose duration can't be read. The node asks the VIDEO object for its length and raises "end_seconds is 0 and the clip length is unknown; set end_seconds" if it comes back empty. If you hit that, just type the end time.
Your queue stalls while it works. The node waits for the job - tens of seconds to several minutes - and ComfyUI runs nodes in order. Long edits freeze the graph; queue one and go make coffee.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| prompt | STRING | — | |
| model | COMBO | default | 5 options: default, gemini-omni, gemini-omni-1.1, ltx-2.3, ltx-2.5 |
| resolution | COMBO | 720p | 3 options: 720p, 480p, 1080p |
| start_seconds | FLOAT | 0.00–3600 | — |
| end_seconds | FLOAT | 0.00–3600 | 0 = to the end of the clip |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| credits_charged | INT | — |