/ Модель

Характеристики

Лицензия
Своя лицензия
Опубликована
14 авг 2026

MiniMax-H3-Longvideos

Генерация видеоТекст → видео3 профессии

H3-LongVideos — узел ComfyUI для создания длинных видео с синхронизированным аудио на основе MiniMax-H3 и текстовых запросов.

930скачиваний за 30 дней136лайковвеса обновлены10 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

H3-LongVideos — узел для ComfyUI, работающий с MiniMax-H3 и создающий длинное видео с синхронизированной звуковой дорожкой по текстовому запросу. Он формирует ролик из последовательности сцен: каждый новый кадр начинается с последнего кадра предыдущего эпизода, после чего фрагменты объединяются в одно видео. Модель рендерит до примерно 15 секунд за раз; узел предназначен для многократной генерации таких фрагментов. Для работы нужны модель MiniMax-H3, текстовый энкодер H3 и видео-VAE.

Текст запроса можно разбить на абзацы, задавая сцену и отдельные планы, либо использовать параметры для общего описания и памяти персонажей. Режим plan_only позволяет просмотреть текст, который будет передан для каждого плана, без рендеринга. README описывает узел и его взаимодействие с MiniMax-H3, но не указывает точную архитектуру или размер весов репозитория; файлы представлены в формате safetensors. Проект находится в активной разработке, автор предупреждает о возможных ошибках и необходимости обновлять узел. Лицензия указана как other, конкретные условия использования в карточке не приведены.

Сценарии применения

  • генерация многоэпизодного видео по текстовому сценарию
  • создание видео с синхронизированной звуковой дорожкой
  • сборка последовательных планов с сохранением последнего кадра предыдущего плана
  • просмотр текста планов перед запуском рендеринга в ComfyUI

Ограничения

Узел находится в активной разработке, поэтому возможны ошибки и некорректно работающие функции; требуется ComfyUI с поддержкой MiniMax-H3. Для генерации нужны совместимые текстовый энкодер и видео-VAE, а точные условия лицензии в карточке не раскрыты.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Support me on Ko-fi

This node is a constant work in progress! If you are noticing bugs or features that do not work, please ensure that you are pulling the most recent version and updating your workflows.

Please note that RealRebelAI has been blacklisted from this project. If you want further updates for the node, please continue to use my updates as the node is being continously worked on. Don't support those who steal other people's work for their own credit.

H3-LongVideos

Long MiniMax-H3 video with synchronised audio from a single prompt, in ComfyUI.

H3 renders up to about 15 seconds at a time. This node renders your scene shot by shot, starts each shot on the last frame of the one before, and joins them into one video with one soundtrack. Your text reaches the model word for word.

Install

Copy this folder into ComfyUI/custom_nodes/ and restart the ComfyUI server. Requires ComfyUI with native MiniMax-H3 support.

Updating from an earlier version: the node's widgets have changed. Right-click the node → Fix node (recreate), set your values again and save the workflow. Inputs an old workflow still has linked that the node no longer uses are ignored and named in info.

What to load

UNETa MiniMax-H3 model — a hybrid fl2va/ref2va merge works best
CLIPH3's text encoder, loader type minimax
VAEthe H3 video VAE
audio VAEthe H3 audio VAE — a separate file, and it must be the converted one
UNETLoader ─┐                     images ─> Video Combine / Save Video
CLIPLoader ─┼─> H3-LongVideos  ─> audio  ─┘
VAELoader ──┘                     info   ─> Show Text

prompt is an input socket — wire a multiline text node into it.

Turn on plan_only to see the exact text every shot will get, without rendering.

Writing the prompt

Paragraphs are separated by a blank line.

  • The first paragraph is the scene: where it takes place, who the characters are and what they look like. It opens every shot, so keep actions out of it. It does not put anyone in a shot: the beats do.
  • Every paragraph after it is one shot, sent word for word.
  • A prompt with a single paragraph is one shot.
  • anchor (optional) is framing for the whole film: look, camera, lighting, location. It goes at the front of every shot. When it is filled in, every paragraph of the prompt is a shot and there is no scene paragraph.
  • character_memory (optional) is who is in the film and what they wear. It follows the scene in every shot.
A dim cell with a cot. Mara <Picture 1> is a tall woman in a grey dress. Dan <Picture 2> is a guard in a dark uniform.

Mara sits on the cot and stares at the door.

Dan handcuffs her wrists behind her back.
hold: Mara, handcuffs behind her back

Dan presses duct tape over her mouth.
hold: Mara, duct tape over her mouth

Dan says "Not a sound." He walks out.

Restraints

The node reads restraints and gags from your beats and carries them from shot to shot: handcuffs, zip ties, rope, chains, shackles, duct tape, gags and ball gags, blindfolds and collars. It reads them being put on (Dan handcuffs her wrists behind her back, Dan grabs Mara's wrists and cuffs them, Dan takes out the handcuffs and snaps them onto her wrists, Dan wraps duct tape around her mouth), already on (her wrists cuffed behind her back, Mara sits in handcuffs, Mara sits with duct tape over her mouth), and coming off (Dan pulls the tape off, Dan unlocks the cuffs).

  • Whoever does it is never the one restrained. In Dan grabs Mara and cuffs her the cuffs go on Mara, and in Dan gags her the pronoun is read as the one other person present.
  • Something put on during a beat is in plain view at the end of that shot and held from the next. Something a beat describes as already on is held from that shot's first frame.
  • When it cannot tell who is meant, it lists the sentence in info instead of guessing. Add a hold: line for those.
  • Handcuffs, zip ties, shackles, ball gags or blindfolds that a beat mentions but that could not be placed on anyone (Dan carries handcuffs on his belt) are listed in info as not read. If they belong on someone, add a hold: line.
  • Something comes off only when a beat takes it off directly (removes the tape, peels the tape off her hips). Mentioning it, or cutting more tape, does not count. When more than one piece could be meant, the sentence is listed in info instead.
  • Each shot's line in info says what goes on, what is held, and what comes off.
  • Behind her right after her hands, wrists, arms or the cuffing (Dan cuffs her hands behind her) counts as behind her back. When cuffs were first read with no position (Dan cuffs her), a later beat that gives one (her hands cuffed behind her back) moves them there from that shot on. Cuffs with no position at all are drawn wherever the model likes, usually in front, so say where they go.
  • Wrists held behind the back or in front stay locked together for the whole shot. When someone else in the shot does something with their hands (Mike grabs the chain and pulls it), the prompt says it is Mike who does it, with his own hands, while her hands stay still, so she does not slip free to do it herself. That line is left out when she does something with her own hands, or when the beat is about her hands.
  • A leash goes with the collar it is clipped to (Dan clips a chain leash to her collar, Mara kneels in a collar and chain leash). While it is on, each shot names the hand holding it (The leash runs from Mara's collar to Dan's hand.), taken from the beat that has someone hold, lead, pull or clip it, so the other end is never drawn on a stranger. Unclipping the leash leaves the collar on.
  • Whenever someone in a shot is held, the prompt names everyone else in it as wearing none of it, so a collar, cuffs or a leash are not copied onto them.
  • Tape, rope or chain wrapped around the body, torso, chest or arms to the sides, or around the hips, waist or between the legs, is carried as wound all the way around, front and back, so later shots do not shrink it to strips on the front. These wraps get no pose. A wrap around her with no body part named counts as a torso wrap. Legs tied together count as the ankles.

Clothing

The node reads clothes coming off and going back on (Max takes off her jacket, Crystal pulls her thong down her legs, Crystal puts her jacket back on). From the next shot on, a garment that came off is taken out of that person's description in the scene paragraph, the anchor and character_memory, so no shot asks for it again. It comes back once they put it on.

  • A garment belongs to the person its pronoun or name points to, or else to the one person whose description mentions it.
  • A garment that comes off takes its whole description with it: a thong made of black latex, with lace trim, cut high on her hips, thong underwear, and a following sentence such as It is black latex. Nothing of it is left for H3 to paint onto her.
  • When it cannot tell whose it is, the sentence is listed in info.
  • Something worn with a detail on one side (chastity belt with tight rear heavy duty security chain going through her ass, a dress with a zip down the back, a collar with a ring at the front) is stated the right way round in every shot that person is in. The detail can be written in the same sentence or the next (A chain is attached to the back of the belt.), with or without a or her. A chastity belt gets this even with no detail written. Each side is pinned to a place on the body: for a belt or anything on the hips, the front low on the belly and the back on the backside, with a fastened chain or strap between the buttocks up to the small of the back; for a collar, the throat and the nape of the neck; for a dress or top, the chest and between the shoulder blades. It turns with them, and their body never twists at the waist. That keeps the front of a belt from being drawn on their backside when they are seen from behind, or after it leaves the frame. info names each thing kept this way.
  • A chain, strap or cord on something worn that is described as fastened or on one side (a chain on the back that keeps it secured to her body, a rear chain) is said to stay fastened at both ends, snug against them, in every shot, so it never comes back hanging or dragging on the floor. One you describe as hanging is left as you wrote it. A beat that pulls it (Dan pulls her up by the chain), or pulls a leash, says it keeps its length: the links are solid and never stretch, and the pull moves her by the belt or collar instead, unless the beat itself breaks, cuts or unclips it. In that shot the pull line stands in for the fastened line. When she wears a leash and a chained belt, the prompt says they are two separate chains, so the belt chain is not drawn running out to a hand like a leash.

Lines the node reads

These lines are taken out of the text before the model sees it. hold: and release: correct the restraint reading, and remove: and wear: the clothing reading. For the person they name, they replace whatever was read from that beat.

linewhat it does
hold: Name, item; itemName is wearing or bound with these items. From the next shot on, every prompt states Name: item; item., that it all stays on for the whole shot, and where held wrists or ankles stay, until the item comes off.
release: Name, itemthe item comes off in this shot. release: Name takes everything off Name.
seconds: 6this shot's length, whatever shot_length says.
remove: Name, garmentthe garment comes off in this shot and leaves Name's description from the next shot on.
wear: Name, garmentthe garment goes back on, and back into the description from the next shot on.
exit: NameName leaves during this shot and is gone from the next. A named exit such as Dan walks out is read without it; use it for anything else, such as He leaves.
cutthis shot starts fresh instead of on the previous shot's last frame. Use it for a new place or time.

A hold: line in the scene paragraph, the anchor or the character memory means the person starts the video already held.

The node also reads these lines when they are written on the same line as the sentence, as their own paragraph, with a dash or colon after the name, or without the comma. A line it still cannot read, such as a hold with no name, is listed in info.

In a hold: line, write each item the way it should look: handcuffs behind her back, wrists zip tied in front, rope around her ankles, duct tape over her mouth. The shot where an item goes on is described by your own sentence, and it closes with the item in plain view at its last frame. The item joins the held line from the shot after, so it is not drawn before the action happens.

Who is in each shot

The node keeps track of who is present, so people appear only when they should.

  • A character is anyone with a line in character_memory (Mara: a tall woman, or a sentence that starts with their name: Mara is a tall woman, Mara, a tall woman), a name written right before a picture tag (Mara <Picture 1>), or a name on a hold: or exit: line.
  • Anyone named in a beat is present from that shot on, until they leave. So is someone a beat calls her or him, when they are the only woman or man among the characters.
  • The scene paragraph and the anchor describe people but do not put them in a shot.
  • A beat with nobody in it (The camera pans across the empty bathroom) says that nobody is in the shot.
  • After a cut, only the people that beat names are present.

For someone who is not present:

  • their picture is left out
  • their character_memory line is left out
  • any scene sentence that is only about them is left out, along with the sentences after it that start with she or he and so are about them too

When everyone in a shot is a declared character, a shot with one or two people also says how many are in it. The count is left out whenever someone else might be there: a name that is not declared, or a guard, the man, a crowd. Words that only describe someone (a slim Asian woman, Blue eyes.) do not count as another person. Declare every character, with a character_memory line or a picture tag, so the guarding covers them all.

Extras are welcome: a beat can bring in a woman, a crowd or a name you did not declare. That shot then says everyone other than your characters looks nothing like them, with a different face, hair, body and clothes and none of what they wear, so an extra is never drawn as a copy of someone in character_memory.

Continuity

Every shot that starts on the previous shot's last frame says so in its prompt: the same place and the same people, one moment earlier, with nobody new joining, or, when the beat brings someone in, with that person coming into view and nobody else. When the beat brings in extras, they come into view too. That frame reaches H3 as a picture, and a picture the prompt does not mention is read as another person.

After a cut, someone who was last seen alone is given that frame as their current look, in place of their portrait. Their clothes and anything held on them carry over.

When a beat shows someone from behind (the camera moves behind Crystal, her back to the camera, she faces away from the camera, a rear view of Crystal), the prompt says they face away from the camera from head to feet, so their back and the back of everything they wear show, and that their body never twists at the waist. That keeps a belt or harness from being drawn back to front when the shot continues from a frame that showed its front, without turning only half of them around. Say what the back of an item looks like (a chain hanging from the back) so it can be drawn.

H3 comes out a little more saturated and contrasty each time it continues from a frame, and left alone that burns the picture more with every shot. The first shot, and the first shot after a cut, are left as rendered and set the look. Every shot that continues from a frame is graded where it picks up: the first frame you see is matched to the frame it continues from (brightness, contrast, saturation and the shape of the shadows and highlights), since both show the same moment, and that same correction is carried through the rest of the shot. Nothing later in a shot is forced onto another frame's tones, so someone stepping in, the lights going down or the camera turning keep their own look. A continued shot that opens washed out gets its colour back the same way. A black frame, or a shot that does not pick up where the last one ended, is left as rendered. Each continued shot's numbers (how its opening came out against the frame it continues from, whether it was graded, and its finished look against shot 1) go to the ComfyUI log.

Reference pictures

Wire up to four pictures into ref_image_1 … ref_image_4 and refer to them in the text as <Picture 1> … <Picture 4>. A tag with no picture wired is removed.

Once a person is held, their own picture (written right after their name, as in Mara <Picture 1>) is left out of shots that start on a frame they are already in. A portrait without the cuffs or the tape pulls them back off. In the shot where they come in, the picture still goes in. After a cut the picture comes back, unless a later frame of them stands in for it.

The pictures work on every checkpoint and LoRA. The hybrid b25-49 (fl2va_ref2va) and any checkpoint whose file name says ref2va were trained on them and get them in every shot. FL2VA checkpoints, such as the base minimax_h3_fl2va and 10Eros, and FastH3 were not: when a person is already in the frame a shot opens on and their picture comes in as well, they draw that person twice. So on those, a person's picture is left out of a shot that continues from a frame they are in, and that frame carries their look. The first shot, the shots after a cut, and anyone walking into a continued shot still get their picture. The node reads which checkpoint is loaded from its own model link.

Sound

  • Speech: a shot with a quoted line ("…", '…', “…”, ‘…’ or <d>…</d>) speaks. Every line reaches H3 inside <d>…</d>, the speech tags it was trained on, with the words exactly as written. Its first half second is held quiet so the line does not start on the cut.
  • Room to speak: a shot gets about 2 words a second plus 1.5 seconds for its line, even past shot_seconds, up to H3's 15 seconds, so words are not rushed or cut off. A seconds: line still wins. A line too long for one shot is flagged in info: split it across beats.
  • No talking without a line: every shot without a quoted line renders its picture with the audio held silent and says that nobody speaks and every mouth stays closed, so nobody's mouth moves to mumbling. The closed-mouth wording is left out when the beat has its own vocal sound (screams, gasps) or a gag holds a mouth open.
  • Foley and ambience: such a shot keeps the sounds its beat brings (footsteps, a door, cuffs closing, tape tearing) and the ambience of the scene (rain, traffic, a quiet house). Its sound is made in a second, audio-only pass over the finished picture, so the sound follows what is on screen and has no moving mouths to put a voice to. That pass listens to a half-size copy of the picture, which makes it about six times cheaper than rendering the shot again, and the picture itself is never touched. Set foley_resolution to full for a full-size pass. A beat that describes its own sounds keeps those.
  • No music: every shot says there is no background music, unless its beat or the scene mentions music, a radio, singing or an instrument.
  • Silence: a shot with nothing to hear stays silent. Turn silence_wordless off to render every shot in one pass with free audio instead.
  • Gagged speech: a gagged person in a shot with speech or vocal sounds is muffled. Their lips stay shut under tape, or the mouth stays held open around a ball or ring gag.
  • Ambient bed: wire an audio file into ambient_audio to have it looped under the whole soundtrack at ambient_level. It plays under the model's sound and does not change it.

Pose control

Text alone cannot stop H3, or a LoRA, from freeing restrained arms or catching a fall with cuffed hands. Every shot where someone's arms or ankles are held is checked with DWPose after it renders, in one of two ways.

With the H3 Fun controlnet: the skeleton is held, on any H3 checkpoint and LoRA. The node loads minimax_h3_fun_controlnet_union_pruned_int8_convrot.safetensors from models/model_patches by itself, or uses the one wired into pose_controlnet.

  • Each such shot is first drafted at half size from the same text and seed. DWPose reads the draft, and the shot itself is then rendered at full size with the restrained person's skeleton held in place for the first pose_end of the steps. If the draft gives nothing to hold, the shot is rendered at full size without it.
  • The draft costs about a tenth of a full render, so a checked shot costs about 1.1 renders instead of 2. The movement follows the draft.
  • The controlnet was trained on the hybrid b25-49 checkpoint and reads its 8-wide timestep curve. On any other checkpoint the node reads each step's timestep off that checkpoint and hands the controlnet the matching point on the hybrid's curve, so keep the hybrid checkpoint in models/diffusion_models; only its small curve is read.

Without the controlnet: the shot is rendered again. If the restraint broke, the shot is rendered again on a new seed, up to pose_retries more times. The node keeps the take where it held, or else the take where it broke in the fewest frames. Set pose_retries to 0 to turn this off.

Needs: the DWPose files from comfyui_controlnet_aux:

  • ckpts/hr16/yolox-onnx/yolox_l.torchscript.pt
  • ckpts/hr16/DWPose-TorchScript-BatchSize5/dw-ll_ucoco_384_bs5.torchscript.pt

What is checked:

  • The held positions come from the restraints the node reads, or from your hold: lines: behind her back, in front, above her head, at her waist, ankles, ankles to her wrists.
  • In the shot where the restraint goes on, the limbs are checked only from the moment they close.
  • Some shots are not checked:
    • a restraint fastened to an object (to the bed)
    • a restraint coming off
    • any shot where the node cannot tell who is restrained
  • info says which way the restraints are being kept and has a line for every checked shot.

Upscaling

  • latent_upscale samples each shot at resolution and enlarges it in latent space before decoding, which is much cheaper than sampling large.
    • It needs the Minimax H3 Latent Upscaler node pack, with its H3 model in models/latent_upscale_models.
    • latent_upscale_scale sets the factor.
    • The next shot is still handed a frame at the sampled size.
  • upscale enlarges the finished video:
    • rtx: NVIDIA RTX Video Super Resolution (needs the comfyui_nvidia_rtx_nodes pack)
    • model: the model picked in upscale_model, from models/upscale_models
    • lanczos: a plain resize
  • upscale_target_short_edge fits the result's short edge to that many pixels. lanczos needs it; for rtx it also sets the factor.

FastH3 and Hyperflow

  • FastH3, detected from the model, runs at shift 10/3 with the VSA attention it was trained on (keep 10%, from 20% of the schedule). If torch is on the cudaMallocAsync allocator, restart ComfyUI with --disable-cuda-malloc.
    • FastH3 was distilled for text and first-frame shots only, so it gets reference pictures only where nobody can be drawn twice (see Reference pictures).
  • Hyperflow, detected from the LoRA's metadata or its file name, samples every shot on its own 8-step grid (shift 12/3, euler). Leave sigmas unwired.
    • Its endpoint conditioning is added back from hyperflow_endpoint_v1.0.safetensors beside the node, or from the original minimax_h3_hyperflow_8step_v1.0.safetensors in models/loras.
    • That needs a checkpoint with a full time embedder. On curve checkpoints (hybrid b25-49, 10Eros, FastH3) Hyperflow runs without it, and info says so.

Settings

widget
resolution, megapixelsaspect preset and size; at 1.0 each preset is its native size, 0 keeps it exactly
shot_secondsthe longest a shot may be, and every shot's length when shot_length is fixed
shot_lengthfrom the beat sizes each shot from its own beat: about 2.2s per action, or the spoken line, plus one action's time where something is put on, capped by shot_seconds. fixed gives every shot shot_seconds
steps, sampler_name, scheduler, seedas in KSampler; one seed for the whole video
first_framethe first shot starts on this picture
sigmasyour own schedule (overrides Hyperflow's grid)
shift_video, shift_audioH3's sigma shift, 12/3 by default
silence_wordlesskeep shots without a quoted line silent
plan_onlyreport the shots and their text without rendering
pose_strength, pose_endhow strongly, and for how much of the schedule, the skeleton holds
pose_retrieswithout pose control, how many times a shot whose restraint broke is rendered again
anchorframing at the front of every shot; filled in, every paragraph is a shot
character_memorywho is in the film, after the scene in every shot
latent_upscale, latent_upscale_scaleupscale each shot in latent space, and by how much
upscale, upscale_model, upscale_target_short_edgeupscale the finished video
ambient_audio, ambient_levelan audio bed looped under the whole soundtrack, and how loud
foley_resolutionthe size of the picture copy the sound pass listens to: half (about six times faster) or full

Outputs

slotwhat it is
imagesthe finished frames
audiothe synchronised soundtrack
infowhat the node did for each shot, how long it took, and its contrast and colour against shot 1
scriptthe exact text each shot was given
frames_per_shot, total_frames, shots, video_secondsfor downstream nodes

Other nodes here

  • H3 Shot Length: one shot length as seconds and as a valid H3 frame count.
  • H3 Overlay: watermark and intro title composited onto the finished frames.

Notes

  • No negative prompt and no cfg setting: H3 runs at cfg 1.
  • Denoise is fixed at 1.0: partial denoise desyncs the joint audio/video schedule.
  • A LoRA whose timestep layers were built for another checkpoint's time curve, such as one made for an 8-wide hybrid and used on 10Eros or the full FL2VA, cannot attach those layers as it is, and the sampler loses part of its timing, which shows as faded beats. The node re-fits them onto the loaded checkpoint's curve, which needs the checkpoint the LoRA was built for in models/diffusion_models; info says how many.
  • ComfyUI sizes H3's working memory at a fraction of what a shot uses (a block needs about 105 KB per token), so on long shots it keeps too much of the model in VRAM and runs out. The node tells it 120 KB per token instead, so the rest of the model streams in as needed. If a shot still does not fit, the error says to lower megapixels or shot_seconds.
  • Widgets are restored by position. If they read NaN, recreate the node as described under Install.

Disclaimer

The owner of this repo will not be responsible for any copyright strikes incurred because of use. You are responsible for your works. Use this node responsibly and ethically.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Генеративная модель выложена не в формате diffusers.

Ревизия весов
7583e0f

0 моделей