Nodes/Magic Hour/Magic Hour · Image to Video
ComfyUI Node

Magic Hour · Image to Video

Animate anything already in your graph, rendered on someone else's GPUs

By RhythmP28·Created about a month ago·Updated about a month ago· 0
Magic Hour · Image to Video
  • image
  • video_path
prompt
modelwan-2.2 · free · physics & camera motion
end_seconds5
resolution480p (free)
audiofalse
api_key

Magic Hour · Image to Video is the sibling of the pack's Text to Video node, and for most people it's the more useful one. Image-to-video is the community-favorite video workflow for a reason: anchoring the first frame to a real image fixes most of the consistency and composition problems that pure text-to-video wanders off into. You build or load an image in ComfyUI, wire it in, describe the motion, and get back an .mp4 - rendered entirely on Magic Hour's infrastructure. No GPU, no video model checkpoints squatting on your drive, no VAE-loading incantations.

That's the pitch and it's the honest one. The closed models in the dropdown (sora-2, veo3.1, kling-3.0, seedance-*) cannot run locally at all - no weights exist to download. The free-tier models (wan-2.2, ltx-2.3, minimax-h3) are the ones you could self-host if you had the hardware. So: use this when the card is missing, or when the image deserves a frontier model's motion.

How it works

The node takes your IMAGE, uploads it to Magic Hour (PNG, via a presigned URL), submits an image-to-video job with your prompt, then blocks and polls until rendering finishes. Status comes back as queued/rendering/complete rather than a percentage, so the progress bar creeps up and hovers near 99% until the job genuinely lands - that's expected, not a hang. A 5-second clip typically takes around a minute. When it's done, the .mp4 is saved to your ComfyUI output folder as magichour_i2v_<timestamp>.mp4 and the file path is returned.

One detail worth knowing: it uses the first frame of whatever IMAGE you feed it. Feed it a single image. If you accidentally wire in a multi-frame batch (say, straight out of a video decoder), the rest is silently ignored.

The inputs that matter

  • image - any IMAGE in the graph: a loaded photo, a Magic Hour generated still, an img2img pass, a ControlNet-touched render. That's the whole point of putting it in ComfyUI - the video starts from your pipeline's output, not a fresh roll of the dice.
  • prompt - describe the motion, not the scene. "Camera pushes in, rain starts" beats "a rainy city."
  • model - labels carry the plan you need, what the model's good at, and the implied cost per second. The free defaults are wan-2.2 (physics & camera motion) and ltx-2.3 (fast, good for iterating).
  • end_seconds - clip length. Pick any and the node snaps it to the nearest length the selected model actually accepts, with a console note. No error, just a correction.
  • resolution - 480p (free) through 4k (business), gated by your plan. Pick above your plan and the node steps down and retries rather than failing.
  • audio - flip on only for models with native audio (minimax-h3, veo3.1-audio).
  • api_key - leave empty if you've exported the env var.

There's no aspect ratio dropdown here, unlike the text-to-video node - the output inherits your image's aspect. The one output is video_path (STRING), and like its sibling this is a terminal node, so it runs with nothing wired downstream. Save the path to a file-ops node, hand it to a video loader, or just grab the file from the output folder.

Installing and your first run

ComfyUI Manager: search "Magic Hour" → install. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/RhythmP28/comfyui-magic-hour

Restart ComfyUI. Only requests, pillow, and numpy - no model downloads, no torch-extra wheels.

Free API key (no card, 400 credits plus 100/day) at magichour.ai/developer. Paste it in the node field, or better, set it once so a shared workflow doesn't carry your key around:

export MAGIC_HOUR_API_KEY="your_key_here"

Where people get burned

The cost is printed to the console before each run (wan-2.2 · 5s · 480p = ~120 credits) - that's your cue to sanity-check before you let it rip on a paid model. Picking a paid model on the free plan errors clearly and names the free options. Failed jobs are auto-refunded, and out-of-credits raises an explicit error rather than a mystery 422. The dropdown model list is a snapshot that goes stale as Magic Hour rotates models.

And the thing to keep at the front of your mind: your image leaves the machine. If the still you're animating is someone's face or unreleased work, know that it's being uploaded to a server you don't control. That's inherent to this entire category of node, not a bug in this one.

CategoryMagic Hour

Inputs (7)

NameTypeDefaultDescription
imageIMAGE
promptSTRING
modelCOMBOwan-2.2 · free · physics & camera motion13 options: wan-2.2 · free · physics & camera motion, ltx-2.3 · free · fastest, best for iterating, minimax-h3 · free · native audio, seedance-1.5 · paid · smooth, precise motion, kling-2.6 · paid · action & motion blur, kling-3.0 · paid · best cinematic, up to 4k, +7
end_secondsCOMBO536 options: 1, 2, 3, 4, 5, 6, +30
resolutionCOMBO480p (free)4 options: 480p (free), 720p (creator+), 1080p (pro+), 4k (business)
audioBOOLEANfalse
api_keyoptSTRING

Outputs (1)

NameTypeDescription
video_pathSTRING