SayMaker Image to Video
Hit queue, make coffee, come back to an MP4
- image
- video_path
- url
What it is, and why the wait is the feature
You give it a still and a sentence describing motion. It gives you a clip. There is no video model on your disk doing the work - this node uploads your frame to saymaker.ai, kicks off an image-to-video job on somebody else's GPUs, polls, downloads the MP4, and saves it into ComfyUI's output folder.
The default model is minimax-h3-fast, and that choice is deliberate: the author's own tooltip says it's the one that runs on a free account. Everything better in the list - veo-3-1, kling-3-0, seedance-2 - needs a paid plan or a credit pack.
The MiniMax H3 angle is what makes this more than another me-too wrapper. H3 is MiniMax's 33B omni-modal video model with native stereo audio, and in August 2026 they opened the weights - under a licence that geofences the US, EU, UK and South Korea out of the territory entirely. For a lot of readers that puts local H3 off the table on licensing alone. The hosted API is globally available, so a call like this one is the compliant way to touch H3 from those regions. Veo 3.1 and Kling 3.0, meanwhile, are closed at any VRAM.
How it works
The node turns your tensor into a PNG, uploads it for a public URL, and sends an image-to-video request with that URL as image_input. Then it polls every ten seconds - video takes minutes - and gives up after 5400 seconds: 90 minutes of blocked graph. The file lands in ComfyUI's output directory as saymaker-<unix-timestamp>.mp4, and the URL is pushed to the node's own display so you can see what it made without hunting.
Because it's registered as an output node, it runs when you hit Queue - you don't need to wire it to a preview to make it fire.
Inputs
image is the first frame. Anything that produces an IMAGE works: a local generation, a Load Image, the output of SayMaker Edit Image, an upscale.
prompt describes motion and camera, not appearance. The default is a good template: "the camera slowly orbits the subject while soft light sweeps across it." Say what moves; the model can already see the frame.
model is free text with the free-tier caveat baked into the tooltip. duration is seconds, 2 to 30, and the tooltip is refreshingly honest: "where the model offers a choice." The value is passed through; if the model you picked only does a fixed length, it ignores you. MiniMax H3 Fast tops out around fifteen seconds on a free account.
api_key can stay empty if SAYMAKER_API_KEY is exported before ComfyUI starts. seed - consistent across all three nodes in the pack - is never sent to the API; it exists to change the node's inputs so ComfyUI's cache lets it run again. The tooltip's "change to force a new run" is literal: a reroll, not a reproducible seed.
Outputs, and the catch
video_path is a STRING. Not a VIDEO object, not an IMAGE batch - a filesystem path. That's the thing that trips people coming from local video packs: you can't wire it into a latents-and-frames pipeline. You wire it into a loader node that takes a filepath (the VHS-style video loaders), or you just open the file. url is the hosted copy as a string.
There's also no aspect-ratio widget, and the underlying client always sends 16:9 with audio on. For a vertical or square source, check the returned clip before you build anything downstream around it - you can't set this from the node.
Install
ComfyUI Manager: search ComfyUI-SayMaker. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/hanshs474/ComfyUI-SayMaker
Restart, then grab a key at saymaker.ai/settings/apikeys. No pip installs, no model downloads, dependencies = []. The pack is the vendor's own client (PublisherId = "saymaker") with a standard-library HTTP layer - readable in one sitting, which is the right instinct for anything that holds your key.
Where people get burned
It blocks, for minutes. Not a hang. Free-account jobs queue before they render, and polling is what starts them. Ninety minutes is the hard ceiling; if it blows past that you get an error, and the run may still be sitting finished in your history on the site.
Pick a paid model on a free plan and you get a plan error rather than a clip. Same for an empty balance - those land as distinct exception types in the console, which is the fastest read on what went wrong.
One job at a time on free accounts. A graph with four of these will trip over itself. Queue them as separate runs.
Video is the expensive end of the meter. The per-call economics are the standing objection to every API node in ComfyUI, and a 10-second clip at the better models is where a session's credits disappear. Test the prompt and the motion on minimax-h3-fast first, then spend on the good model once.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| prompt | STRING | the camera slowly orbits the subject while soft light sweeps across it | — |
| model | STRING | minimax-h3-fast | minimax-h3-fast runs on a free account; veo-3-1, kling-3-0, seedance-2 need a plan or a credit pack |
| duration | INT | 62–30 | Seconds, where the model offers a choice |
| api_keyopt | STRING | Key from saymaker.ai/settings/apikeys (new accounts get sign-up credits). Leave empty to read SAYMAKER_API_KEY from the environment. | |
| seedopt | INT | 00–4294967295 | Change to force a new run |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |
| url | STRING | — |