DCAI
Loading Light/Dark Toggl

How to Use MiniMax H3 Ref2VA in ComfyUI: Reference-to-Video with Image, Video, and Audio

⏱️88min read
📅 Oct 16, 2026
How to Use MiniMax H3 Ref2VA in ComfyUI: Reference-to-Video with Image, Video, and Audio featured Image

This time, I'll introduce how to use the Reference to Video (Ref2VA) mode of "MiniMax H3" in ComfyUI. In the previous article, I covered Image to Video, which generates a video from a single input image. In this article, I'll cover Ref2VA, which references a mix of images, videos, and audio. It is a mode that lets you take a character's appearance, motion, camera work, voice, and style each from a different source. For the basic mechanism and model configuration of H3, please see the previous article.

What You'll Learn in This Article

  • An overview of MiniMax H3's Reference to Video (Ref2VA) and how its checkpoint differs from FL2VA
  • The limits on files that can be referenced in Ref2VA, and how to count slots on the ComfyUI node
  • How to assign roles to reference materials, and how to use labels such as <Subject N>
  • The models required for the official ComfyUI template "MiniMax H3: Reference to Video" and where to place them
  • How to connect a reference video with audio, and how to convert a reference video to 24fps
  • The labels ComfyUI adds automatically, and how their numbers are determined
  • A comparison of generation time and quality with ref_image_size and Turbo LoRA
  • The structure of the DCAI custom workflow aimed at high-quality videos (💎Members only)
  • How to write a 6-section prompt (💎Members only)

What Is MiniMax H3 Reference to Video (Ref2VA)?

Ref2VA (Reference-to-Audio-Video) is a mode that generates by passing reference images, videos, and audio in addition to text. Image to Video, which I covered in the previous basic article, fixed the first frame and created what follows from it. In Ref2VA, you can specify things like "take the appearance from this material," "take the motion from this material," and "take the voice from this material." It can be said that this is the mode that most clearly shows H3's design philosophy of letting you write the relationship between references and the generated result in natural language rather than with fixed task names.

FL2VA vs Ref2VA: Different Checkpoints

The first thing to understand is that FL2VA and Ref2VA use different model files themselves. MiniMax releases H3-Base as two task-specific checkpoints, and each has a fixed set of supported tasks.

CheckpointSupported TasksInput Conditions
MiniMax-H3 Base FL2VAt2va/fl2vaText + optional first frame, last frame, or both
MiniMax-H3 Base Ref2VAref2vaText + reference images, reference videos, and reference audio

In other words, Ref2VA does not work with minimax_h3_fl2va_pruned_int8_convrot.safetensors, which was downloaded in the basic article. You need to download minimax_h3_ref2va_pruned_int8_convrot.safetensors separately. The ComfyUI nodes are also split: "MiniMax H3 Image to Video" for FL2VA and "MiniMax H3 Reference to Video" for Ref2VA.

LoRAs also need to match the checkpoint they were distilled on. The 🔗official ComfyUI documentation explains that when a LoRA trained on the full build is loaded into the pruned version, the adaln-related tensors have a shape mismatch and are not merged. The Turbo LoRA loaded by the template has no adaln tensors, so it can be loaded with either build.

Ref2VA Reference File Limits

There are limits on the reference materials that can be passed to Ref2VA. The specifications listed on MiniMax's model card are as follows.

TypeCountLength per FileTotal Length
ImageUp to 9——
VideoUp to 32–15 secWithin 15 sec
AudioUp to 32–15 secWithin 15 sec

In addition, the upper limit on the number of files across all types combined is 12. If you use 9 images, videos and audio combined are limited to 3.

What I want you to understand here is that the "15 seconds total" limit applies separately to video and audio. Images have no concept of duration, so they are not subject to this limit in the first place. The three slots are independent.

  • Image slot: Up to 9. There is no duration limit.
  • Video slot: Up to 3, 15 seconds total.
  • Audio slot: Up to 3, 15 seconds total.

It is easier to understand if you think of the 15 seconds of video as a "budget" shared among multiple clips. Since the minimum per clip is 2 seconds, the combinations are as follows.

ConfigurationTotalAllowed
5 sec × 3 clips15 sec○
10 sec + 5 sec15 sec○
10 sec + 3 sec + 2 sec15 sec○
15 sec × 1 clip15 sec○
10 sec × 2 clips20 sec✗

For example, if you use a 10-second video as a camera work reference, the remaining video budget is 5 seconds. However, references for a character's appearance and facial expressions are basically passed as images, not videos, so even if the video budget decreases, the 9 image slots remain fully available. It is a good idea to think of the video slot as being for "things that can only be expressed with video."

✅Reference videos are treated as 24fps frame sequences. The node does not convert the frame rate, so 30fps and 60fps videos need to be converted to 24fps before being connected. I'll explain this together with how resolution is handled in "Reference Video Size and Frame Rate" later.

What I want to note here is that the inputs on the ComfyUI node side do not correspond one-to-one with the three categories on the model card. The MiniMaxH3ReferenceToVideo node has four input groups, and the soundtrack attached to a reference video is a separate group. The upper limits on the number of slots specified in the node's code are as follows.

Input GroupContentSlot Limit
ref_imageReference image9
ref_videoReference video (24fps frame sequence)3
ref_video_audioAudio track of the reference video (paired with the video of the same number)3
ref_audioStandalone reference audio3
MiniMax H3 Reference to Video node 

Let me add a note on why ref_video_audio is a separate group. This node has no input that accepts a video with audio as a whole. ref_video is a frame sequence (IMAGE) and ref_video_audio is audio (AUDIO), and each accepts only one of the two. Then, they are linked by number correspondence, where ref_video_audio_0 is the audio of ref_video_0.

✅You can also connect the same audio to ref_audio, but in that case it is treated as "an independent audio material" rather than "audio synchronized with the video." I'll explain the difference between the two and the specific wiring in "How to Connect a Reference Video with Audio" and "When You Want to Reference Audio Separate from the Video" later.

⚠️The number of slots visible on the node is not the upper limit. The four reference inputs are built in a way that adds one more slot when you connect to an empty slot (ComfyUI's Autogrow). If you keep connecting to empty slots, you can increase them up to the limits in the table above.

At this point, the number of slots and the number of files do not match. ref_video_audio is where the audio track of the reference video itself goes, so one video occupies two slots, one for video and one for audio. In other words, even if you fill all 18 slots, the actual number of files is 9 images + 3 videos + 3 standalone audio = 15 files.

Even so, the upper limit for reference files is 12 files total, so 15 exceeds it. Moreover, ComfyUI's MiniMaxH3ReferenceToVideo node checks neither the 12-file total nor the 15-second total. Exceeding the limits does not cause an error, so you need to count yourself so as not to exceed 12 files total.

✅Conversely, there are also limits that exist only on the node side. Reference videos are truncated to the frame count of the video being generated. In other words, if length is left at the default 124 frames (about 5.17 seconds), even if you connect a 10-second reference video, only the first 5 seconds or so are used. If you want the camera work of a long reference video to take full effect, you also need to extend the length of the generated video by the same amount (243 frames for 10 seconds). Also, the minimum for a reference video is not the model card's 2 seconds but 5 frames (about 0.2 seconds at 24fps), and fewer than 5 frames results in an error. When truncating, it is also rounded to the 17k+5 grid.

How to Assign "Roles" to Reference Files

The most important thing in Ref2VA is to put into words in the prompt which material is used for what. The official ComfyUI documentation also says to "give each reference a job" and that "it works much better when you make explicit which reference drives which part of the shot."

The roles that can be assigned are, for example, as follows. I'll also organize which of the three slots mentioned in the previous section each one consumes.

RoleContentMain Material Used
Appearance (identity)Retains the character's face, hair, clothing, and body type.Image
StyleInherits the art style, color design, lighting, and texture.Image
Facial expression / poseSpecifies facial expressions and standing poses.Image
Composition / shot designSpecifies the composition and order of shots as a storyboard or character sheet.Image
MotionReuses the movements of people and objects.Video
CameraReferences camera work, cuts, rhythm, and temporal structure.Video
VoiceAssigns a voice quality and way of speaking to a specific speaker.Audio
BGM / sound effectsReferences the style of music and the texture of sound effects. The audio can also be reused as is.Audio

As this table shows, for roles where a still image is sufficient, it is advantageous to pass an image. It does not consume the 15-second duration budget, and you can use up to 9. The basic approach is to save the video slot for things that cannot be expressed without the passage of time, such as walking style, hand movements, mouth movements, and camera work.

Giving Multiple Roles to a Single Material

As a way to save even more of the budget, there is the property that a single material can serve multiple roles. MiniMax's official prompt guide clearly states that "a single subject may be defined by multiple reference materials, and a single reference material may provide multiple subjects." Regarding audio as well, it says that "when a single audio material serves multiple roles, describe those roles in one natural sentence rather than adding more subsections."

✅Labels such as <Subject N> and <Video N> that appear from here on are explained in detail in "How to Use Labels and How They Differ from <Subject N>" later, and sections such as subject_definitions and retention_analysis are explained in detail in "Ref2VA Prompt Format: From 3 Fields to 6 Sections" later.

This is linked to how labels are used. <Video N> is a label used for relationships involving the entire video (editing source, continuation source, camera work, cuts, rhythm, temporal structure), and reusing the people, objects, or actions shown in that video falls under <Subject N>. The same guide also says that "<Video N> indicates the source of material or structure and does not replace subject labels."

In other words, a single 10-second clip can serve as both a camera work reference and a reference for a person's motion at the same time. There is no need to connect the same material twice. The way to write subject_definitions looks something like this.

<Subject 1> is the woman whose appearance comes from <Picture 1> and whose walking motion comes from <Video 1>.
<Video 1> is the camera-movement and pacing reference for the target video.

In this example, the appearance is taken from the image and the walking style from the video, while the same <Video 1> is also set up as the camera work reference. Only one image and one video are consumed.

Connecting Alone Does Not Determine the Role

Finally, here is the most important caution. Simply connecting materials to the node does not determine their roles. H3 just receives reference materials labeled in order, so correspondences such as "use the camera work of <Video 1>" or "apply the voice quality of <Audio 1> to <Subject 1>" must all be written on the prompt side. The reason the Ref2VA prompt has dedicated sections called subject_definitions and retention_analysis is to fully write out these assignments.

Ref2VA Prompt Format: From 3 Fields to 6 Sections

As I introduced in the basic article, prompts for T2VA, I2VA, FL2VA, and L2VA had a structure of a leading alignment instruction + three fields. For Ref2VA, MiniMax officially provides a separate prompt guide, and it consists of six sections.

SectionRole
subject_definitionsDefines the content to be referenced and its labels.
summarySummarizes the task type, the finished video, and the main reference relationships.
retention_analysisDescribes how the referenced content is retained, transferred, and reused.
detailed_descriptionThe main body that describes visuals, actions, shots, sound, and dialogue in playback order.
overall_soundscapeDescribes ambient sounds and action sounds together.
non_diegetic_musicDescribes BGM that only the audience can hear.

The latter three follow the same approach as in the basic article. The big difference is in the first three, and the defining feature of Ref2VA is that the definition of "which reference material is used as what" and the declaration of "how it is reflected in the finished video" are independent sections. The name of the main body also changes from integrated_multimodal_description to detailed_description, and the overall style declaration is to be placed in 1–2 sentences before [Shot 1], not inside [Shot 1].

✅Details such as the formal format of the six sections, how to use relationship markers like fully_preserved, and how to combine task types are explained in the paid article "How to Write MiniMax H3 Ref2VA Prompts in the 6-Section Format" later.

How to Use Labels and How They Differ from <Subject N>

In Ref2VA prompts, reference materials are indicated with four types of labels. If you mix these up, the prompt will not be read as intended.

LabelWhat It Refers To
<Subject N>Reusable visible content extracted from reference materials. This covers people, animals, objects, backgrounds, costumes, effects, styles, actions, facial expressions, and so on.
<Picture N>The reference image itself. Set it up when using it as the first frame, a keyframe, or the last frame of a shot, or as a composition anchor.
<Video N>The reference video itself. Use it only for relationships involving the entire video: editing source, continuation starting point, and reference for the temporal structure of the entire video.
<Audio N>Reference audio. It refers to a standalone audio file or the audio track attached to a reference video.

The easiest thing to get wrong is the relationship between <Subject N> and the other three. In MiniMax's prompt guide, <Subject N> is defined not as a file but as "a unit of content actually used in the finished video". For example, if you borrow only a person's appearance from a reference image, instead of setting up <Picture 1> as an independent item, you cite it as the source within the definition of <Subject 1>.

<Subject 1> is the young woman in <Picture 1>, with long dark hair, a blue cardigan, and a thin silver necklace.

Conversely, if you use an image as is as the first frame of a shot, make <Picture N> an independent item.

<Picture 2> is the first frame of [Shot 1], showing a woman seated beside a café window.

You can also build a single subject from multiple materials. This is a way of writing where the appearance comes from an image and the walking style comes from a video.

<Subject 1> is the woman whose appearance comes from <Picture 1> and whose walking motion comes from <Video 1>.

Reusing people or objects shown in a reference video also falls under <Subject N>. <Video N> is a label that indicates the source of material or structure, and it does not replace subject labels. Also, <Audio N> is not set up just because a file contains sound. Set it up only when actually using or referencing the audio.

✅The numbers for <Video N> and <Audio N> are independent for each type. The same video file can become <Video 1> and <Audio 2>, and whether the numbers match or not does not indicate the correspondence of sources.

Exploring the ComfyUI "MiniMax H3: Reference to Video" Template

ComfyUI template "MiniMax H3: Reference to Video" 

As always, I recommend updating ComfyUI to the latest version. This time, I tested it with 🔗v0.38.0.

According to the official ComfyUI documentation, the three basic templates Text to Video, Image to Video, and Reference to Video work with ComfyUI 0.30.0 or later.

"MiniMax H3: Reference to Video" generates videos by combining reference images, reference videos, and reference audio. In the Image to Video template from the basic article, the nodes were grouped into a subgraph, but the Reference to Video template does not use subgraphs, and all nodes are laid out on the top-level canvas. KSamplerSelect and BasicScheduler are also visible as is, so changing the settings is easy.

First, let's check the "MiniMax H3: Reference to Video" workflow example from the templates.

Template list 

Open the template list and select Video from FOUNDATION in the left menu. Once the video-related templates are displayed, select "MiniMax H3: Reference to Video."

When you open the template, the missing models are displayed. If you download them following the instructions, you can run it as is. ✅If you are not sure, I explain it in detail in the next section, so please refer to that.

The official ComfyUI documentation is below.

Download the Models Required for Ref2VA

What needs to be swapped for Ref2VA are two things: the diffusion model and the LoRA. The text encoder and audio VAE can use the same files as in the basic article as is. Get the files below and place them in the specified folders under ComfyUI/models.

TypeFileRelation to the Basic Article
Diffusion Modelminimax_h3_ref2va_pruned_int8_convrot.safetensorsRef2VA only. New download required
Text Encoderqwen3vl_32b_minimax_h3_nvfp4_awq.safetensorsSame as the basic article
Video VAEminimax_h3_video_vae_int8_convrot.safetensorsThe fp16 version was used in the basic article (see below)
Audio VAEminimax_h3_audio_vae_fp32.safetensorsSame as the basic article
LoRAminimax_h3_ref2v_turbo_4step_v0.1_comfyui_bf16.safetensorsRef2VA only. New download required

Placement example:

ComfyUI/
├── 📁 models/
│   ├── 📁 diffusion_models/
│   │   └── minimax_h3_ref2va_pruned_int8_convrot.safetensors
│   ├── 📁 text_encoders/
│   │   └── qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors
│   ├── 📂 vae/
│   │   ├── minimax_h3_video_vae_int8_convrot.safetensors
│   │   └── minimax_h3_audio_vae_fp32.safetensors
│   ├── 📂 loras/
│   │   └── minimax_h3_ref2v_turbo_4step_v0.1_comfyui_bf16.safetensors

✅A note on the video VAE. In the basic article, I used minimax_h3_video_vae_fp16.safetensors, but the current templates specify minimax_h3_video_vae_int8_convrot.safetensors for all of T2V, I2V, and R2V.

Diffusion Models Text Encoder VAE LoRA

Input Files for "MiniMax H3: Reference to Video"

The template uses two reference images. They can be downloaded from the official ComfyUI documentation.

  • red_superboy_on_city_roof.png: The character reference image.
  • mecha_dragon_lightning.png: The style and subject reference image.

"MiniMax H3: Reference to Video" Nodes Explained

Nodes shared with the basic article (Load CLIP, KSamplerSelect, Resolution Selector, SamplerCustomAdvanced, VAEDecode, VAEDecodeAudio, CreateVideo, etc.) have almost the same roles and settings. Here, I'll focus on the parts that change in Ref2VA.

MiniMax H3 Reference to Video

MiniMax H3 Reference to Video node 

This is the central node of the workflow. Like the MiniMax H3 Image to Video node in the basic article, it has two outputs, the conditioning (positive) and an empty latent, and the actual denoising is handled by SamplerCustomAdvanced. The inputs are as follows.

  • clip: Received from Load CLIP.
  • vae: The video VAE. It is an optional input, and if it is not connected, the reference images and reference videos are used only for the text encoder's conditioning.
  • audio_vae: The audio VAE. This is also an optional input, and if it is not connected, the reference audio is used only for the text encoder's conditioning.
  • ref_image: The input group for reference images. Starting from ref_image_0, you can add up to 9 images.
  • ref_video: The input group for reference videos. Starting from ref_video_0, up to 3 videos. They are 24fps frame sequences, and 2–15 seconds is expected.
  • ref_video_audio: The input group for soundtracks attached to reference videos. Up to 3, and they correspond by number. The relationship is that ref_video_audio_0 is the audio of ref_video_0.
  • ref_audio: The input group for standalone reference audio. Starting from ref_audio_0, up to 3.
  • prompt: Paste a prompt in the 6-section format.
  • width / height: Received from Resolution Selector.
  • length: The number of frames at 24fps. The default is 124 (about 5 seconds), and it is rounded up to the 17k+5 grid. The trained range is about 124–362 frames.
  • ref_image_size: The resize method for reference images. Choose from match and max (see below).

✅The four reference input groups use the Autogrow method, so the number of slots initially visible is not the upper limit. The relationship between the number of slots and the number of files, and how to count the 12-file total, are explained in "2-2. Ref2VA Reference File Limits."

The differences from the Image to Video node are summarized as follows.

ItemMiniMax H3 Image to VideoMiniMax H3 Reference to Video
Supported taskst2va/fl2varef2va
Image inputfirst_frame / last_frame (1 each)ref_image (up to 9)
Video inputNoneref_video (up to 3) + ref_video_audio
Audio inputNoneref_audio (up to 3)
Audio VAENo inputaudio_vae (optional)
Video VAERequiredOptional
Reference image size settingNoneref_image_size

About ref_image_size

This setting determines at what size reference images are passed to the model. There are two options.

  • match (default): Matches the total pixel count of the reference image to the total pixel count of the generation resolution. The aspect ratio is preserved, and it only downscales, never upscales. Processing becomes lighter.
  • max: With a short side of 2048px as the upper limit, only images larger than that are downscaled. Identity reproducibility improves, but speed drops.

According to the description of ref_image_size in the node's "Node Info," reference tokens are carried through processing across all sampling steps, so setting it to max can make it several times slower. I recommend trying match first.

✅When using the Turbo LoRA, match is recommended. The LoRA's distributor (lightx2v) states that because match was used in training during distillation, the same resize policy should be used for inference.

✅In either mode, the node does not crop and resizes by rounding the width and height to multiples of 32. Therefore, there is no need to resize reference images to the output size in advance. There is no problem even if the aspect ratio differs from the output; in fact, cropping to the output size can cut off the face or clothing you want referenced. It is safe to connect the original image as is.

Reference Video Size and Frame Rate

Reference videos have no setting like ref_image_size, and the node resizes them with a fixed policy. What I want to note here is that the size of the reference video is determined independently of the output width / height.

  • Resolution: Downscaled while preserving the aspect ratio to fit a reference-video-specific standard of 768px on the short side and an area limit of 768×1344px. Videos smaller than this standard are not upscaled; the width and height are only rounded to multiples of 32.
  • Frame count: Truncated to match the output length. This is explained in detail in "2-2. Ref2VA Reference File Limits."
  • Frame rate: Not converted. The node processes the input as a 24fps frame sequence.

⚠️Please convert reference videos to 24fps before connecting them. If you connect a 30fps or 60fps video as is, the node treats it as 24fps. The 2fps frames passed to the text encoder are also extracted based on the calculation of "one every 12 frames," so the timestamps and the actual timing of the footage drift apart.

ComfyUI's standard "Load Video" has no setting to convert the frame rate. To convert it, use one of the following methods.

  • Load with a custom node: ComfyUI-VideoHelperSuite's "Load Video (Upload) 🎥🅥🅗🅢" has a setting called force_rate, and setting it to 24 lets you load the video thinned out to 24fps. The output is split into a frame sequence (IMAGE) and audio (AUDIO), so you can connect them directly to ref_video and ref_video_audio.
  • Convert in advance: Export to 24fps with video editing software or ffmpeg, then load it with the standard "Load Video."

The resolution is automatically downscaled, so there is no need to match it to the output size. However, reference videos are processed at up to 768px on the short side. Even if the output is a small size such as 0.4 megapixels (864 x 480), the reference video may be heavier. If VRAM or generation time is tight, downscaling the reference video in advance makes processing lighter.

How to Connect a Reference Video with Audio

As mentioned in "2-2. Ref2VA Reference File Limits," this node has no input that accepts a video with audio as a whole. ref_video is the IMAGE type (frame sequence) and ref_video_audio is the AUDIO type, and each accepts only one of the two. Therefore, a reference video with audio is connected by splitting one file into two.

In ComfyUI, "Load Video" outputs the VIDEO type, and "Get Video Components" splits it into images, audio, fps, and so on. The official template "MiniMax H3 Fun ControlNet Union" also uses the path Load Video → Trim Video → Get Video Components → images to extract the frames of the control video. Wiring it with the same idea looks like this.

Load Video → Get Video Components ─┬─ images ─→ ref_video.ref_video_0
                                   └─ audio  ─→ ref_video_audio.ref_video_audio_0

The key point is to match the numbers. ref_video_audio_0 is treated as the audio of ref_video_0. If you open the node's "Node Info," the description of the ref_video_audio input also says "Soundtrack of the same-numbered reference video."

Even Split into Two Inputs, It Is "One Reference Video"

In "2-2. Ref2VA Reference File Limits," I briefly explained that one video with audio occupies two slots, one for video and one for audio. So, does using two inputs mean it consumes two reference videos' worth? No, it does not. Video and audio connected as a pair are integrated into a single unit as one reference video.

In the 🔗node implementation, paired video and audio are passed to the model as a single block called video_audio. Furthermore, in the model-side processing, the video and audio share the same timeline within this one block. The 🔗implementation comment also says that "the block's audio rows are placed immediately before the video rows, and both share the same cursor origin." The time occupied by the reference is also not the sum of the video length and audio length, but the longer of the two.

This point of "sharing the same timeline" is the significance of connecting audio to the correct input. The model is told which sound corresponds to the footage at which moment. This matters when using the original video's sound as is, or when you want to match mouth movements with the voice.

However, two labels are attached for use in the prompt. The video is <Video 1>, and its audio is <Audio 1>. This does not mean "two have been used"; it means that the video and audio of one video are each given a name. MiniMax's official prompt guide also clearly states that "the same reference video may correspond to <Video 1> and <Audio 2>. Different numbers do not prevent them from coming from the same source material." Two labels being attached to one file is a form anticipated in the official format as well.

To summarize, it looks like this.

AspectWhen Connected as a Pair
Input slots used2 (ref_video_0 and ref_video_audio_0)
Number of reference videos1
Blocks passed to the model1 (video_audio)
Time occupied by the reference1 segment (the longer of the video and audio, not the sum)
Labels in the prompt2 (<Video 1> and <Audio 1>)

⚠️If the audio VAE is not connected, they do not form a pair. If audio_vae is not connected, no audio latent is created, so the block type falls back to video instead of video_audio. Only the <Audio j> label appears, and no timeline sharing occurs. If vae (video VAE) is not connected, the block for that reference video itself is skipped, including the audio.

When You Want to Reference Audio Separate from the Video

So far, I've been talking about "the sound attached to a reference video." If you want to reference audio unrelated to the video, connect it to the ref_audio side. This is for uses such as passing only a voice quality sample or only the style of BGM.

In this case, it becomes a standalone block called audio and is not linked to any video. The timeline is also placed in a segment separate from the video, so no correspondence of "this sound belongs to the footage at this moment" is created. It is a form suited to references that are not tied to a specific moment, such as voice quality or BGM style.

How to use the two inputs is as follows.

Sound to PassInput to ConnectHow It Is Passed to the Model
Sound attached to a reference videoref_video_audio (same number as the video)Becomes one block with the video and shares the timeline.
Audio unrelated to the videoref_audioBecomes a standalone block and is not linked to the video.

✅If you do not use the video's sound, do not connect anything to ref_video_audio. MiniMax's official prompt guide also clearly states that "a normal reference video does not create <Audio N> just because the file contains sound." If you connect it, an <Audio j> label appears and consumes one number, so the numbers for audio connected to ref_audio shift back.

ComfyUI Adds Labels Automatically

This is the most easily misunderstood part of Ref2VA. Labels like <Picture 1> are not something you write in the prompt yourself to link to materials. ComfyUI generates them automatically at the stage of passing to the text encoder and inserts them before the prompt.

The implementation on ComfyUI's text encoder side clearly specifies the order in which they are assembled.

【t2va】
<prompt>

【fl2va】
"<Picture 1>: " <image> ["<Picture 2>: " <image>] <prompt>

【ref2va】In request order, with 1-based ordinals per type
  Image → "<Picture i>: " <image>
  Audio → "<Audio j>: "
  Video → "<Video k>: " then every 2 frames "<T.T seconds>" <2 frames of video>
followed by <prompt>

This policy is also written on the node itself. When you hover the cursor over the node, <Picture i> / <Video k> / <Audio j> reference conditioning for MiniMax H3. Use the same tags when prompting. is displayed. It is an instruction to "use the same tags when writing prompts."

In other words, the prompt you write yourself simply follows this automatically generated sequence of labels. Since the node determines the correspondence between labels and materials, the correct usage is to refer to them on the prompt side according to those numbers. If the numbers are off, you end up pointing to a different material than intended.

Label Numbers Are Determined by Slot Order

So how are the numbers determined? In ComfyUI's node implementation, reference materials are arranged in the following order.

  • Images from ref_image are arranged in order starting from <Picture 1>.
  • Next, videos from ref_video are arranged in order starting from <Video 1>. At this time, the <Audio j> label of that video's soundtrack is placed immediately before the corresponding <Video k>.
  • Finally, standalone audio from ref_audio is arranged.

Numbers are assigned starting from 1 for each type. What I want to note here is <Audio N>. Because the soundtrack of a reference video takes a number first, if you are using one video's audio, audio connected on its own becomes <Audio 2> instead of <Audio 1>.

This order is the same in MiniMax's official sample as well. The Ref2VA example on the model card is the output when one video and one audio (2 files total) were passed to H3-Context-IR.

<Video 1> is the source video for the editing task.
<Audio 1> is the synchronized audio track of <Video 1>, providing the background music.
<Audio 2> is the voice timbre reference for <Subject 1>'s voice, containing a spoken male voiceover.

Only one audio file was passed, but two audio labels appear: <Audio 1> and <Audio 2>. <Audio 1> is the audio contained in the video, and <Audio 2> is the audio passed on its own. You can see that the order in which the video's audio takes a number first matches between ComfyUI's implementation and the official format.

The basis is the order of the slots. The Multiframe Reference page of the official ComfyUI documentation also explains that "<Picture 1> is the image connected to the first ref_image slot, and <Picture 2> is the second." They are arranged not in the order you connected them, but in the order of slot numbers: ref_image_0, ref_image_1, and so on.

Slot Numbers and Label Numbers Are Off by One

This is an easy point to overlook. Slot names start from 0, and labels start from 1. Just because the input name is ref_video_0 does not mean you should write <Video 0> in the prompt.

Slot NameLabel Used in the Prompt
ref_image_0–ref_image_8<Picture 1>–<Picture 9>
ref_video_0–ref_video_2<Video 1>–<Video 3>
ref_audio_0–ref_audio_2<Audio 1>–<Audio 3>

In other words, the video connected to ref_video_0 is <Video 1>. The implementation on ComfyUI's text encoder side also clearly states that label numbers are "1-based ordinals per type."

However, the label number is not "slot number + 1." To be precise, it is the order among connected materials. The node implementation skips unconnected slots, so empty slots do not consume numbers.

For example, if you leave ref_video_0 empty and connect a video only to ref_video_1, that video becomes <Video 1>, not <Video 2>. To avoid miscounting numbers, I recommend filling the slots in order from the top.

Differences from MiniMax's Official Guide

When it comes to handling labels, roles are divided between MiniMax's official prompt guide and ComfyUI's implementation. Since this is easy to get confused about, I'll organize it.

LabelDoes ComfyUI Output It Automatically?Notes
<Picture N>YesAttached to all images connected to ref_image.
<Video N>YesAttached to all videos connected to ref_video.
<Audio N>YesOnly the label is inserted; the audio itself is not passed to the text encoder (see below).
<Subject N>NoIt does not exist on the node side. It is a label defined only within the text of the prompt.

The following two points deserve particular attention.

  • <Subject N> is unrelated to the node. ComfyUI outputs only three types: <Picture>, <Video>, and <Audio>. <Subject N> only has meaning once you yourself declare, within the text of subject_definitions, what is taken from which material.
  • Connected images always get a <Picture N> label. ComfyUI names images one by one as <Picture 1>, <Picture 2>, and so on and inserts them into the prompt, so there is no image without a label.

Regarding the second point, MiniMax's official guide has a description that is easy to be confused by, so let me add a note. The guide says the following.

  • If an image is used only to define a character, scene, costume, or style, do not give that image its own definition line; instead, cite it as the source within the definition of the corresponding <Subject N>.

Reading this, you might think "Does this mean I shouldn't use <Picture N>?" but that is not the case. What the guide is talking about is how many definition lines to write in subject_definitions, which is a separate matter from whether a label is attached. Looking at an actual example makes this clear.

Suppose you connect two images as follows. Each has a different purpose.

  • ref_image_0 (<Picture 1>): An image for determining the woman's appearance.
  • ref_image_1 (<Picture 2>): An image used as is for the first frame of the first shot.

In this case, subject_definitions is written like this. Both lines are examples from MiniMax's official guide.

subject_definitions:
<Subject 1> is the young woman in <Picture 1>, with long dark hair, a blue cardigan, and a thin silver necklace.
<Picture 2> is the first frame of [Shot 1], showing a woman seated beside a café window.

Comparing them, there is only one difference.

  • <Picture 1> does not have its own line. It only appears as a source within the line for <Subject 1>. Since it is an image only for determining appearance, it is written in the way the guide describes as "not giving it its own definition line."
  • <Picture 2> has its own line. Since it has a specific role as the first frame, it is given its own definition line.

And ComfyUI attaches the labels <Picture 1> and <Picture 2> to both images. The fact that <Picture 1> has no definition line and the fact that the label exists are compatible. Think of the guide's instruction as a matter of how to write the text.

There is one more important point that becomes clear from looking at the implementation. The content of reference audio is not passed to the text encoder (Qwen3-VL). The implementation comment also says "audio never enters Qwen," and only the label string <Audio j>: goes into the text side. The audio itself is encoded by the audio VAE and passed as a payload to the DiT side.

In other words, the model that interprets the prompt has not heard what that audio sounds like. Explaining in words what kind of audio it is, such as "<Audio 1> is a calm male narration," becomes more important than with image or video references. The fact that the official guide has you write the role of audio in one sentence in subject_definitions is likely consistent with this situation.

There is also an imbalance in how reference videos are handled. What is passed to the text encoder are frames sampled at 2fps, with a timestamp <T.T seconds> inserted every 2 frames. Since full-resolution latents are passed to the DiT side, it is an asymmetric configuration of "coarse in semantic understanding, fine as video."

If/Else Switch (model) and If/Else Switch (Steps)

If/Else Switch node 

These nodes switch whether or not to use the Turbo LoRA. The value of "Boolean (Enable Lightning LoRA)" is connected to both switches, so enabling the LoRA also switches the number of steps at the same time.

  • OFF (default): Uses the UNETLoader model as is and generates with 20 steps from "Int (Full)."
  • ON: Uses the model passed through LoraLoaderModelOnly and generates with 4 steps from "Int (Lightning LoRA)."

How Many Steps Should You Use for Ref2VA?

The official ComfyUI documentation clearly states that in generation that uses references, the cost of cutting the number of steps is especially high. The reason is that reference tokens are carried through all sampling steps. Reducing the number of steps reduces the number of times that conditioning takes effect.

Summarizing the documentation, it is as follows.

  • With 4 steps (Turbo LoRA ON), it is said that the references may hardly be applied. The symptom given is that the subject's pose and face angle drift away from the reference as the clip progresses.
  • If you need results faithful to the references, it is recommended to turn the Turbo LoRA switch OFF and run 20 steps, and if it still drifts, raise it to 25 steps.
  • Shots with simple content can work even with 12–16 steps.
  • For shots with many fine patterns or small objects, it is said that improvement continues up to around 50 steps.
  • Audio converges more slowly than video. It is said that at 8 steps (Turbo LoRA OFF), dialogue and voice quality are the weakest parts, and it becomes practical at 12 steps or more.

In Ref2VA, there are many situations where reproducing the references is prioritized over speed, so it seems best to first try the default 20 steps.

How to Use the "MiniMax H3: Reference to Video" Workflow

Now let's actually use the template.

How to use the workflow 
  • Load the reference images: Load the materials red_superboy_on_city_roof.png and mecha_dragon_lightning.png into the two "Load Image" nodes. The one on the left is ref_image_0 (<Picture 1>), and the one on the right is ref_image_1 (<Picture 2>).
  • Load each model: In the "Models" group, check that the diffusion model, text encoder, and two VAEs are loaded correctly.
  • Enter the prompt: Enter the prompt in the "Input Text (Prompt)" node. Point to the reference materials with labels, and write which material is responsible for what.
  • Specify the resolution and length: Specify the aspect ratio and megapixels in "Resolution Selector (Size)," and the number of seconds in "Float (Duration)." The template defaults are 16:9, 0.4 megapixels (864 x 480), and 5 seconds.
  • Run the generation: Run it with the "Run" button.

After a while, the generated result is displayed in "Save Video."

✅The template's default prompt is not in the 6-section format, but plain English text that lists a style declaration and CUT 1/CUT 2. It is good to read it as an example of how to point to <Picture 1>, <Picture 2>, and <Audio 1> with labels. Note that the default prompt mentions <Audio 1>, but in the template's initial state, nothing is connected to ref_audio.

✅The official ComfyUI documentation explains that H3 templates sample with BasicGuider, so there is no negative prompt. If you name unwanted elements, such as "no subtitles," those words are read as is as part of the description. In Ref2VA, narrowing the scope by declaring how each reference is handled in retention_analysis seems to be the sensible way to write it.

Official Workflow Results and Speed Comparison

The generated result is as follows. All videos in this article are AI videos generated with MiniMax H3. The audio is muted, so if you want to hear it, please unmute it.

This video is hidden due to the MiniMax H3 Community License.

As a reference for generation speed, in my environment (RTX3090), generation with the default 20 steps took 271 seconds (4 minutes 31 seconds) (SageAttention was not used). ✅Note that compared to when only images are referenced, as in the template, using a reference video takes more than twice as long to generate.

Below is a comparison of generation times for different ref_image_size settings and with the Turbo LoRA. I used the default resolution of 864 x 480 and compared them all with the same seed.

SettingStepsGeneration TimeSpeed Ratio
ref_image_size: match204 min 31 sec100%
ref_image_size: max206 min 10 sec136.5%
Turbo LoRA ON (match)41 min 13 sec26.9%
Turbo LoRA ON (max)41 min 39 sec36.5%

Below is the comparison video of the generated results. ✅To make comparison easier, I edited the generated videos side by side. The audio uses the default audio (top left of the screen).

This video is hidden due to the MiniMax H3 Community License.

In terms of quality, as expected, 20 steps without the LoRA was higher quality than 4 steps with the Turbo LoRA. Also, artifact noise occurred with the Turbo LoRA.

This image is hidden due to the MiniMax H3 Community License.

So far, the comparison has been at the default size of 864 x 480. The results of comparing at the training resolution of 1344 x 768 are as follows. ✅The speed ratio is relative to ref_image_size: match (20 steps) at the default size as 100%.

SettingStepsGeneration TimeSpeed Ratio
ref_image_size: match2020 min 11 sec446.9%
ref_image_size: max2021 min 06 sec467.2%
Turbo LoRA ON (match)44 min 28 sec98.9%
Turbo LoRA ON (max)44 min 43 sec104.4%

Below is the comparison video of the generated results. The audio uses the default audio (top left of the screen).

This video is hidden due to the MiniMax H3 Community License.

As expected, these have richer motion and finer details, resulting in higher quality. However, artifact noise also occurred with the Turbo LoRA here.

For reference, the result of ref_image_size: max with 50 steps is as follows.

This video is hidden due to the MiniMax H3 Community License.

As expected, this has the best quality, but generation took 52 minutes. Compared to the default 4 minutes 31 seconds (271 seconds), that is about 1,151% (about 11.5 times), so it is probably not suited to work involving a lot of trial and error.

⚠️As mentioned earlier, the official ComfyUI documentation cautions that in generation that uses references, cutting down to 4 steps may result in the references hardly being applied. In situations where results faithful to the references are needed, the basic approach is to turn the Turbo LoRA OFF and run 20 steps (25 steps if necessary). Also, because audio converges more slowly than video, 4 steps is likely to be tough for clips that include dialogue. A good way to divide usage is to use the Turbo LoRA in the composition exploration stage where speed is needed, and run the final version with the normal number of steps.

Customizing the Official MiniMax H3 Ref2VA Workflow

From here, I'll introduce an improved version aimed at high-quality footage, built on the official ComfyUI "MiniMax H3: Reference to Video" workflow. The customizations are as follows.

  • Comfy kitchen attention implementation: Uses comfy kitchen attention, which is built into ComfyUI as standard, to run inference at the same speed as SageAttention.
  • Veda Sparse Attention implementation: Uses Veda's official node to skip attention calculations and speed up inference. ✅Triton-windows is required.
  • Two-stage inference: Quickly infers a draft at low resolution, and upscales only the results you like to high resolution.
  • Latent upscale: Upscales with a latent (latent space) upscaler.
  • Frame interpolation: You can raise the frame rate of the output video using a frame interpolation node.
  • Live preview during video generation: You can check the progress during generation with a live preview.
  • GGUF support (optional): For low-VRAM environments, you can switch to GGUF models.

✅The paid article introduces the following content.

  • How to use the custom workflow and generation results: Explains everything from preparing the required custom nodes and additional models to the actual operating procedure.
  • How to write a 6-section prompt: Explains the formal format of each of the six sections in order.

The workflow and input materials are published on Patreon. Only paid supporters can view and download them.

Here is a video sample generated with this custom workflow. It was generated by referencing the Open pose introduced in my previous Wan 2.2 and LTX-2.3 articles. The audio is muted, so if you want to hear it, please unmute it. ✅The video has been downscaled for the web.

This video is hidden due to the MiniMax H3 Community License.

Generation time: draft (6 Steps 1344 x 768 24fps): about 15 min, finishing (2688 x 1536 48fps): about 25 min, total: 40 min 43 sec

For reference, below is the result generated using the official template's prompt and input materials.

This video is hidden due to the MiniMax H3 Community License.

Generation time: draft (6 Steps 1344 x 768 24fps): about 4 min, finishing (2688 x 1536 48fps): about 8 min, total: 12 min 11 sec

🔒This content is limited to paid supporters. Paid supporters can view it after logging in.

Summary

In this article, I introduced everything from an overview of MiniMax H3's Reference to Video (Ref2VA) to the steps for generating videos using the official ComfyUI template "MiniMax H3: Reference to Video."

  • Ref2VA is a mode that generates by passing reference images, videos, and audio in addition to text.
  • FL2VA and Ref2VA are separate checkpoints, and Ref2VA requires a dedicated diffusion model and LoRA.
  • Referenceable files are limited to 9 images, 3 videos, and 3 audio files, with an overall limit of 12 files across all types.
  • Video and audio each have a separate limit of 15 seconds total.
  • The ComfyUI node checks neither the 12-file total nor the 15-second total, so you need to count yourself.
  • Reference videos are treated as 24fps frame sequences, so convert them to 24fps in advance before connecting them.
  • Simply connecting materials does not determine their roles; you need to put the role of each reference into words in the prompt.
  • Labels such as <Picture N> are added automatically by ComfyUI, and their numbers are determined by the order of connected slots.
  • For generation that uses references, 20 steps without the LoRA (25 steps if necessary) is recommended over 4 steps with the Turbo LoRA.
  • In my environment (RTX3090), generation with the template's default settings (864 x 480, 20 steps) took 4 minutes 31 seconds.

In the paid article in the second half, I also explain the DCAI custom workflow, which supports speedups with Comfy kitchen attention and Veda Sparse Attention, two-stage inference, latent upscaling, frame interpolation, and GGUF, as well as how to write prompts in the 6-section format. If you are interested, please be sure to check out the main article as well.

Thank you for reading to the end.

If you found this even a little helpful, please support by giving it a “Like”!