Nodes/ComfyUI-FL-MiniMaxH3/FL_MiniMaxH3MotionSample
ComfyUI Node

FL_MiniMaxH3MotionSample

The Half of Motion Refine That Burns the GPU — and the Report That Tells You Why

By filliptm·Created about a month ago·Updated 2 days ago· 17
FL_MiniMaxH3MotionSample
  • prepared
  • model
  • vae
  • positive
  • latent
  • shot_data
  • images
  • report
strength0.50
steps25
context_budget0
seed20260902
context_overlap17
sampler_nameres_multistep
schedulersimple
audio_strength0.50

FL MiniMax H3 Motion Sample is the second internal stage of FL MiniMax H3 Motion Refine. It's dev-only, it isn't in the node menu unless you've enabled ComfyUI's dev mode, and you normally let the parent node build it. But it's the stage that actually samples, and it produces the report string you'll be staring at when the output doesn't look like what you hoped.

Where it sits

Its one required input is prepared - the bundle produced by FL MiniMax H3 Motion Prepare: stretched video latent, stretched audio latent, hold map, retimed conditioning, source and target dimensions. Everything cheap and cacheable already happened upstream. This node takes the model, decides what schedule slice to run, samples, and decodes back onto the original clock.

Inputs that matter

model (a MiniMax H3 model - it checks the latent format and refuses anything else), vae, strength, steps, context_budget, seed, sampler_name (default res_multistep), scheduler (default simple). The advanced ones are context_overlap (17) and audio_strength (0.5). Optional: positive, latent, and shot_data.

strength is the fraction of the full schedule to run - run_steps = round(steps × strength), so 25 × 0.5 is 12 steps. It is not KSampler's denoise convention, and expecting them to behave the same is the most common misread of this whole node.

Outputs are images and report.

What happens inside

It builds a video-to-video init through MAINodes' H3V2VInit, with your audio_strength controlling how much freedom the stretched audio conditioning gets, and retimes the conditioning onto the stretched clock. Temporal masks are remapped to the new frame count; image anchors are moved to their stretched times. Spatial masks, ControlNet and timed video/audio guides are rejected outright - the node has no way to stretch them coherently, and it says so rather than silently desyncing.

If there's a hidden previous-shot prefix (shot-plan mode with Shot Motion Context), it zeroes a noise mask over those frames - video and the matching audio span - so the hidden context is protected from denoising and only the authored span is generated.

Then context windows. At context_budget 0 the whole expanded clip is sampled in one window, matching the reference workflow. At any value ≥5 it clones the model and installs its own overlapping-window handler with static scheduling and pyramid fusion, snapping the budget down to H3 windows. Two consequences worth holding onto: it refuses a model that already carries a context handler, because it insists on owning this, and windowing reduces per-window model work - it is not a VRAM cap.

Sampling itself is deliberately unexciting: sigmas are taken as the tail of the schedule ([steps − run_steps:]), not a fresh short schedule, which is what makes a 12-step refinement behave like the last 12 steps of a 25-step render. Then decode_h3_selected decodes only the frames that map back to the original clock, and the images come back at the requested output size.

Reading the report

The report is the honest part of this node. It gives you frames -> expanded -> frames, source and output dimensions, run_steps/steps, coverage mode, seed, how many context windows ran and how many latent positions they shared, the prep timings (marked as cached when they are), and this render's own sampling and decode timings. It also repeats the caveat: original audio stays on the export path, and frame recovery restores timing rather than original pixels. If a render looked soft, the report usually tells you whether you ran 3 steps with off coverage or 12 steps with balanced.

Install and the errors you'll hit

Same pack route: ComfyUI Manager, search FL MiniMax H3, or clone into ComfyUI/custom_nodes and restart. ComfyUI-MAINodes must be present and current - this stage is where H3V2VInit and the smear/oracle operations are consumed - and the pack needs a ComfyUI new enough to have native H3 support.

Messages that mean something specific:

  • connect a model without an existing context handler - you've got another context-window setup stacked on the model, or you're reusing a model that already ran through this node.
  • context budget must be 0 (whole clip) or at least 5 frames - 1 through 4 isn't a valid window.
  • overlap must be smaller than the resolved context window - pull context_overlap down below the frame budget you set.
  • connect a MiniMax H3 model - the latent format check failed. You're on the wrong architecture.

And the old truth about video applies: cut context_budget first when you're tight on memory, but know that it only trims model work per window. The full source images and the expanded latents stay resident the entire time.

CategoryFL/MiniMax H3/Internal

Inputs (14)

NameTypeDefaultDescription
preparedFL_H3_MOTION_PREP
modelMODEL
vaeVAE
strengthFLOAT0.500.05–1Fraction of the full schedule to run. 25 steps x 0.5 = 12 refinement steps, not 25.
stepsINT254–100
context_budgetINT00–100000 = whole expanded clip (matches the reference workflow). Otherwise a frame-equivalent window budget, snapped down. A causal anchor may add one latent position. Not a total VRAM cap.
seedINT202609020–18446744073709550000
context_overlapINT170–1000
sampler_nameCOMBOres_multistep44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsimple9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
audio_strengthFLOAT0.500–1Refinement freedom for the stretched baseline audio conditioning. Export keeps the original soundtrack separately.
positiveoptCONDITIONINGRequired without shot_plan. Shot-plan mode uses each shot's own conditioning instead.
latentoptLATENTCompleted native H3 video/audio latent, not an empty latent or temporal reshot.
shot_dataoptFL_H3_MOTION_SHOT

Outputs (2)

NameTypeDescription
imagesIMAGE
reportSTRING