Nodes/MiniMax H3/MiniMax H3 FL Constraint
ComfyUI Node

MiniMax H3 FL Constraint

MiniMax H3 FL Constraint — pin the first and/or last frame so the clip lands where you want it

By xiaolibai-sys·Created about a month ago·Updated 29 days ago· 10
MiniMax H3 FL Constraint
  • first_frame
  • last_frame
  • FL_Constraint

Text-to-video has a hard problem: the start is fine, but the ending is a coin flip, and you never know whether the clip actually ends where the shot needs it to. H3's answer is first/last-frame conditioning - you hand it an opening image, a closing image, or both, and it anchors the video to those endpoints. This node is how those frames get into the graph. It's a tiny data-prep node with an outsized effect on whether a clip feels planned or improvised.

How it works

The node takes up to two images - first_frame and last_frame - and packages them into a MINIMAX_H3_FL_CONSTRAINT object that the Conditioning node consumes. It also carries a hidden payload: there's a front-end panel (the node registers a /minimax-h3/fl_constraint route) where the toggles like offload_dit and audio_loudness_match live, and those travel along inside fl_data. So on the surface it's just "plug in two images," but the panel behind it is where finer control - including keyframed FL constraints for the refiner workflows - actually gets set.

Worth knowing from the start: you can't combine this with the PackageData node in the same Conditioning. The README says so outright. Reference media and first/last frames are two different anchoring strategies, and the pack refuses to let you double up. Pick one per shot.

The inputs and outputs

  • first_frame - optional IMAGE. The opening frame the video must start from. Animate a still into motion with this alone (that's the I2VA mode).
  • last_frame - optional IMAGE. The closing frame the video must land on.
  • Both together give you FL2VA - a start and an end the model has to reconcile in between, which is how you get controlled transition clips.

One output: FL_Constraint, type MINIMAX_H3_FL_CONSTRAINT, wired into Conditioning's fl_constraint socket. The Conditioning node then negotiates the mode with the prompt payload - if your SimplePrompt says T2VA but an FL constraint is present, the constraint wins and the mode becomes I2VA/L2VA/FL2VA accordingly.

Each frame must be a [B,H,W,C] IMAGE tensor - the node validates and throws a clear error otherwise. Load your images with a standard Load Image node and you're fine.

Installing it

The pack-wide routine - ComfyUI Manager search "MiniMax H3", or:

cd ComfyUI/custom_nodes
git clone https://github.com/xiaolibai-sys/ComfyUI-MiniMaxH3
pip install -r requirements.txt

then restart. No model files needed by this node itself.

Common issues

  • Nothing changes when you plug frames in. Check your mode. If the prompt payload forces T2VA and there's no FL constraint path, re-wire so the constraint is actually connected to Conditioning. And remember the mutual-exclusion rule with PackageData - if a package is also connected, Conditioning refuses the combination.
  • Wrong shape error. The node validates [B,H,W,C]. If you're feeding it a single [H,W,C] tensor from a bespoke loader, that's your error right there.
  • Expecting the panel settings to persist in shared workflows. The fl_data panel payload lives in the node's front-end state; if you load a workflow JSON that didn't save it, you may get default toggles. Not a bug - a feature of how ComfyUI saves widget state.
CategoryMiniMax-H3/data

Inputs (2)

NameTypeDefaultDescription
first_frameoptIMAGE
last_frameoptIMAGE

Outputs (1)

NameTypeDescription
FL_ConstraintMINIMAX_H3_FL_CONSTRAINT