Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · MiniMax H3 Image to Video LoRA · $0.0625-0.20/s
ComfyUI Node

arkennemasis fal · MiniMax H3 Image to Video LoRA · $0.0625-0.20/s

Consistency, at a JSON box's worth of pain

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · MiniMax H3 Image to Video LoRA · $0.0625-0.20/s
  • target_audio
  • image
  • end_image
  • video
  • video_path
  • expanded_prompt
  • info
◄prompt►
◄duration5►
◄resolution2K►
◄seed-1►
◄enable_safety_checkertrue►
◄prompt_expansion_modebalanced►
◄loras[{"path": "", "scale": 1}]►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

The same H3 image-to-video, with adapters

This is minimax/h3/image-to-video again - image as first frame, prompt optional, generated audio included - except the endpoint also accepts LoRA adapters applied to the transformer. That's the whole reason this node exists as a separate entry: if you (or someone else) trained an adapter for a recurring subject or a house style, this is where it gets used, and the picture comes out looking like the same thing every time instead of like whatever H3 felt like.

Subject consistency is the recurring headache of AI video. A character sheet that holds still for one image is a coin flip once you ask for ten shots. A trained subject LoRA is the honest answer, and on a hosted endpoint it's also the only answer - you can't fine-tune a model you can't download.

Cost is slightly higher than the plain image-to-video endpoint: $0.0625/s at 480p, $0.075 at 768p, $0.1625 at 2K, $0.20 at 4K, since you're paying for the adapter's inference overhead too.

The input that makes it different

loras - a JSON box, required, and prefilled with fal's example: [{"path": "", "scale": 1}]. Each entry is one adapter: path is the LoRA's URL, scale is how hard you push it (1.0 is the usual starting point, lower to dial it back). Add entries to stack several.

Note that the shipped default has an empty path - copy the shape, fill in a real URL before you run, or the request goes out with a blank adapter and comes back as a failure.

Everything else is the H3 image-to-video set:

  • image - the first frame, and the source of the output canvas. end_image optionally pins the last frame for a transition between two stills.
  • prompt - optional. With a subject LoRA the prompt's job is usually motion and camera, not appearance.
  • duration - seconds, default 5.
  • resolution - default 2K, and the same caveat as its sibling: 480P and 768P are native, 2K and 4K upscale a 768P base. At 4K you're at twenty cents a second.
  • prompt_expansion_mode - disabled, fast, balanced (default), quality. Useful to know that quality spends up to ~30s rewriting your prompt; with a LoRA doing the appearance work, disabled or fast is often the better trade.
  • target_audio - pin your own audio over the generated soundtrack (≥2s, ≤15 MB, trimmed or silence-padded, never time-stretched).
  • seed (-1 = model picks) and enable_safety_checker (on).

And the guards: max_cost_usd ($20 default, 0 = no cap, checked before upload), reuse_identical_run, extra_json (for fal fields the node doesn't expose - this is how you'd reach anything the LoRA endpoint has that the widgets miss), max_concurrent (default 1 paid fal call at a time across the whole run).

Outputs

video → SaveVideo / PreviewVideo / the pack's Video Assemble. Plus video_path, expanded_prompt (what H3 actually received) and info (request id, estimate, saved files, fal's raw answer).

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install -r comfyui-arkennemasis/requirements.txt

Restart ComfyUI, then find it under arkennemasis/fal/Video/MiniMax. The key lives in the .env next to run_nvidia_gpu.bat:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

Nothing installs locally beyond the pack - the adapter is fetched and applied on fal's side.

Where people get burned

A LoRA URL that fal can't fetch. The path has to be something fal's workers can download: a fal-hosted file, a public URL, or one of the platform's own training outputs. A C:\ path from your machine means nothing to a server in another country.

Scale 1 is not always right. Subject adapters trained hot will fight the prompt and freeze the motion. If your clips stopped moving when you added the LoRA, that's the first dial to turn.

LoRA plus prompt expansion can double up. If the adapter already encodes the look, let the prompt describe only what you want to happen. This is where expanded_prompt earns its keep - read it and see what your three words became.

You're still paying per second at a premium rate. The LoRA endpoint costs more than the plain one, so run your motion experiments on the cheaper sibling and switch here once you know the shot works.

Four-second clips don't exist. Duration is whole seconds and the tiers price per second of output, so think in 5s and 10s shots when you're planning a sequence.

Categoryarkennemasis/fal/Video/MiniMax

Inputs (14)

NameTypeDefaultDescription
promptSTRINGText prompt for video generation
durationINT55–15The duration of the video in seconds.
resolutionCOMBO2KThe resolution of the generated video. 480P and 768P are native generation modes; 2K and 4K upscale a 768P base result.
seedINT-1-1–2147483647Random seed. A random seed is selected when omitted. -1 leaves it to the model.
enable_safety_checkerBOOLEANtrueIf set to true, the safety checker will be enabled.
prompt_expansion_modeSTRINGbalancedHow much effort to spend rewriting the prompt before generation. 'disabled' skips prompt expansion. 'fast' returns in about a second. 'balanced' picks per request. 'quality' spends up to ~30s on a richer prompt. Empty leaves it out.
lorasSTRING[{"path": "", "scale": 1}]List of LoRA adapters to apply to the transformer. JSON. Required.
target_audiooptAUDIOOptional URL of an audio clip at least 2 seconds long (maximum 15 MB) to pin to the generated soundtrack. Longer clips are trimmed to the requested video duration, keeping the beginning. The original audio replaces the output soundtrack, padded with silence if shorter than the video, without changing playback speed. Exceptionally high sample rates may be resampled to 96 kHz. Accepts an HTTP(S) URL or a base64 data UR
imageoptIMAGEOptional URL of the image to use as the first frame. When provided, the output canvas follows this image. If only end_image_url is provided, the canvas follows that last frame instead. If both images are omitted, the request is handled as text-to-video (16:9 by default).
end_imageoptIMAGEOptional URL of the image to use as the last frame. It may be provided alone for end-only keyframe generation; in that case the output canvas follows this image.
max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

Outputs (4)

NameTypeDescription
videoVIDEO—
video_pathSTRING—
expanded_promptSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.