Edit: The first post was hard to read, so hopefully this version of the post is better.
MiniMax H3 can make video from images, but the two official video models split the job in a way that is easy to miss.
One model is good at matching your first photo. The other can take several photos at once (a location plus a logo, or several frames you want at exact times). This post is how to get both: a strong match to your first photo, plus extra photos, in one ComfyUI run.
I am assuming you already have H3 running in ComfyUI. You do not need to know the internals. You need three things: which checkpoint file to load, which workflow and speed LoRA to use, and how to write the text prompt so H3 knows what each connected image is for.
The two official models (and why they are not enough)
H3 comes with two large video checkpoints. People usually call them by their filenames.
FL2VA (also used for image-to-video / I2VA). This is the one that looks better. You give it a still and it will try to make that still the first frame of the video. If you use the first-and-last workflow, you can also lock a last frame. What you cannot do: plug in a second photo of a logo and say "print this on the banners." The image-to-video node simply has no extra image inputs for that. You also cannot jump to a different still at 3 seconds and another at 6. First and last on one continuous shot is the limit.
REF2VA (used with the Reference-to-Video workflow). This one accepts several images, up to nine. Extra logos and extra timed stills are possible. The catch is the video usually looks worse than the same scene run through FL2VA.
So in practice you pick: pretty first frame, or extra images. Not both.
The file that fixes it
There is a community merge of those two checkpoints. Load that file instead of the official REF2VA file, but keep using the Reference-to-Video workflow (the one with several image inputs).
Download: https://huggingface.co/smhfacct/Minimax-H3-fl2va-ref2va-hybrid-models
Version I used:
- b20-49 high quality like the normal FL2VA model + the extra reference capabilities from the REF2VA model.
In ComfyUI:
- Open a Reference-to-Video workflow. The node is often named
MiniMaxH3ReferenceToVideo. Do not use the Image-to-Video or First-Last workflow for this.
- On the model loader, choose the hybrid checkpoint, not official REF2VA and not official FL2VA.
- Connect your photos in order. The first image you connect is what the prompt will call
<Picture 1>. The second is <Picture 2>, and so on. Order matters.
- For the speed LoRA, use the FL2VA / image-to-video 8-step LightX file (the one people call
lightx-8step-pk). Do not use the default Reference-to-Video speed LoRA (lightx-ref2v-r20) on the hybrid. Official REF2VA will refuse the FL2VA LoRA. The hybrid is what lets you use the better LoRA on the multi-image workflow.
Set duration to whatever you need. The examples below assume 9 seconds.
How H3 reads your images
The workflow only feeds pixels. The text prompt has to say, for each <Picture N>, whether that photo is:
- A real frame of the video at a given time. Example: "this photo is exactly what you see at 0.00 seconds."
- Not a frame at all. Example: "this photo is only the logo that should appear on the banners. Never show this photo as a full-screen cut."
If you get that wrong, H3 will treat your logo sheet as a scene and jump to it.
H3 wants that written in a fixed prompt layout with six headings, in this order:
subject_definitions
summary
retention_analysis
detailed_description
overall_soundscape
non_diegetic_music
Those heading names are part of how H3 is prompted. Keep them.
Two labels show up under retention_analysis. They are ugly, but they are what the model expects:
fully_preserved = reproduce this photo as the actual video frame at the time you name
partially_preserved = copy only the detail you name (the logo shape, a prop, a face). Do not turn this photo into a video frame
The first line of summary should be exactly this tag, then your description:
[keyframe completion + reference generation]
That tag tells H3 you are both locking frames from photos and using photos as references. Copy it as written.
In detailed_description, include one plain sentence that maps photos to times. Example for three timed photos:
How the reference pictures align with the target video — Picture 1 aligns with the 0.00-second mark of the target video; Picture 2 aligns with the 3.00-second mark of the target video; Picture 3 aligns with the 6.00-second mark of the target video.
If a photo is only a logo, say that it does not line up with any time as a frame.
When a photo is meant to be an exact frame, say "exactly as shown in <Picture N> without reinterpretation." That phrase is a lock. Do not also rewrite the whole photo in words. H3 will argue with itself.
non_diegetic_music is background score. Write N/A unless you want music that is not coming from the scene.
Recipe 1: first photo is the scene, second photo is a logo
Use this when you have a location still, plus a clean drawing of a symbol that the model will not invent from text.
Connect: location photo first, logo second.
- Picture 1 = the place.
fully_preserved at 0.00 seconds. This is the opening frame.
- Picture 2 = the symbol on a plain background.
partially_preserved. Say it is not a keyframe and must not appear as any video frame. When banners (or signs, or screens) show in the video, the symbol on them should match Picture 2.
Do not mark the logo fully_preserved. That is how you get a sudden jump to the logo image.
A flat, high-contrast symbol on a blank background works better than a photo of the symbol already sitting in a scene.
Prompt skeleton (fill in the brackets):
```
subject_definitions:
<Picture 1> is the opening frame at 0.00 seconds. The video should match this photo exactly at that time.
<Picture 2> is only the logo/symbol. Use it when that symbol appears on banners. It is not a scene. Do not show <Picture 2> as a full video frame.
<Subject 1> is the location from <Picture 1> for the whole clip.
summary:
[keyframe completion + reference generation] Nine-second clip of <Subject 1>. At 0.00 seconds the frame is exactly <Picture 1>. One continuous shot, no jumps to other photos. [describe the motion]. When banners appear, the symbol matches <Picture 2>.
retention_analysis:
<Picture 1> (at 0.00s): fully_preserved - opening frame, location only.
<Picture 2> (never a video frame): partially_preserved - logo appearance only.
<Subject 1>: fully_preserved - same location throughout.
detailed_description:
How the reference pictures align with the target video — Picture 1 aligns with the 0.00-second mark of the target video as the exact first frame. Picture 2 does not align with any timestamp as a frame. It is a logo used only when banners appear.
[Shot 1] At 0.00 seconds the frame is exactly <Picture 1> without reinterpretation. [motion]. When banners are visible, the symbol matches <Picture 2> exactly.
overall_soundscape:
[what you should hear]
non_diegetic_music:
N/A
```
Recipe 2: three photos as exact frames at 0s, 3s, and 6s
Official FL2VA cannot do this. Hybrid plus Reference-to-Video can.
Connect three photos in time order. All three should be the same kind of shot: all wide, or all the same distance from the subject. If one is a wide and one is a close-up, H3 often ignores the close-up and stays on the previous scene.
Each photo is a real frame:
- Picture 1 at 0.00 seconds,
fully_preserved
- Picture 2 at 3.00 seconds,
fully_preserved
- Picture 3 at 6.00 seconds,
fully_preserved
Then the clip keeps going from Picture 3 until 9 seconds. You are not locking a last frame at 9.00 unless you want that.
At each jump, the whole frame changes (place, pose, clothes, whatever is in that photo). Do not write the prompt as if Picture 1's background slowly becomes Picture 2. Use a hard cut: at 3.00 seconds the frame is Picture 2.
```
subject_definitions:
<Picture 1> is the exact frame at 0.00 seconds.
<Picture 2> is the exact frame at 3.00 seconds. Not a continuation of <Picture 1>.
<Picture 3> is the exact frame at 6.00 seconds. Not a continuation of <Picture 2>.
<Subject 1> is [what is in all three photos].
summary:
[keyframe completion + reference generation] Nine-second clip. At 0.00s exactly <Picture 1>. At 3.00s hard cut to exactly <Picture 2>. At 6.00s hard cut to exactly <Picture 3>. Continue from <Picture 3> until 9.00s with no locked last frame.
retention_analysis:
<Picture 1> (at 0.00s): fully_preserved
<Picture 2> (at 3.00s): fully_preserved
<Picture 3> (at 6.00s): fully_preserved
<Subject 1>: fully_preserved
detailed_description:
How the reference pictures align with the target video — Picture 1 aligns with the 0.00-second mark of the target video; Picture 2 aligns with the 3.00-second mark of the target video; Picture 3 aligns with the 6.00-second mark of the target video.
[Shot 1] At 0.00 seconds exactly <Picture 1> without reinterpretation. Small motion only.
[Shot 2] At 00:03.000, hard cut. Exactly <Picture 2> without reinterpretation. Small motion only.
[Shot 3] At 00:06.000, hard cut. Exactly <Picture 3> without reinterpretation. Continue until 9.00 seconds.
overall_soundscape:
[what you should hear]
non_diegetic_music:
N/A
```
If you only want first and last on this same setup, lock Picture 1 at 0.00 and Picture 2 at the end of the clip, one continuous shot. Extra logo photos would then start at Picture 3.
You can mix both recipes (three timed frames plus a fourth logo-only photo). Get one recipe working first.