Pygmalion carved a statue and it came to life. This workflow does the same thing in one queue: Krea 2 sculpts the still, MiniMax H3 animates it and gives it a voice.
What this is
A single-run ComfyUI workflow that generates video with synchronised native audio using MiniMax H3, optionally starting from a reference still that Krea 2 generates in the same run.
H3 produces picture and sound from one sampler pass. There is no separate TTS stage, no lipsync pass, no audio stitching — dialogue, singing and effects all come out of the same denoise. GALATEA is built around that, and most of its design exists to stop the two halves fighting each other.
One toggle switches between image-to-video and text-to-video. A second toggle chooses whether the reference still comes from disk or gets generated fresh by Krea 2. Everything downstream adapts.
What makes it worth downloading
Two purpose-built prompt enhancers, not one generic one. Both are local GGUF models driven by system prompt files included with the workflow.
The video enhancer rewrites your rough idea into MiniMax H3's official three-section format (
integrated_multimodal_description/overall_soundscape/non_diegetic_music), fences all speech in<d>[English] … </d>tags, assigns stable speaker IDs, and routes diegetic vs non-diegetic sound to the correct section.The image enhancer writes for Krea 2's Qwen3-VL encoder specifically, which wraps every prompt in a fixed instruction to describe colour, shape, size, texture, quantity, text and spatial relationships. It answers that instruction, and it refuses to write negative phrasing because this pipeline has no working negative prompt.
Speech and lyrics survive. The enhancer's top-priority rule enumerates every spoken and sung line in your input and verifies each one reaches the output inside a <d> tag, verbatim. It repairs malformed tags rather than dropping them. Sung vocals use the same tag as dialogue, with beat anchoring and an instruction to mouth the words in time.
Motion is protected too. Left alone, a vision-capable enhancer handed a reference image will describe the picture and you get a ten-second photograph. The system prompt caps static description at a fifth of the output, requires a verb of change in every sentence, requires an explicit end state that differs from the start, and demands at least two of three moving layers (subject, camera, environment).
Approve-before-you-render gate. Krea 2 samples the still, then stops the workflow and shows it. Regenerate until you like it, then Continue — which reloads the exact image you approved and prunes Krea 2 out of the submitted prompt, so the still is not resampled. You pay for one image, not two.
Auto-titled outputs. A small second LLM slugs the final prompt into a short filename, which feeds the %input% token of both save nodes. Video and first-frame still land side by side with matching, readable names.
Requirements
ComfyUI 0.33.1 or newer (needs native MiniMaxH3ImageToVideo), frontend 1.41.13+.
Custom node packs
PackUsed forComfyUI-PixaromaSliders, Sizes, Duration, Seed, Text, Pause Text/Image, Save Video/Image, Show Text, Switch, Switch Source, Switch WH, Group Switch, LoRA Loader, Run Timer/LogComfyUI-LLM-text-processorboth prompt enhancers (llama.cpp GGUF)comfyui-kjnodesModel Preview Override, Sage Attention patch, Torch settings patch, VRAM Debugrgthree-comfyPower Lora Loader, BookmarksComfyUI-MediaMixerFirst Frame Selectorwas-node-suite-comfyuiImage Save (writes the approved still to input/)ComfyUI-DaSiWa-NodesNode Status Switch (boolean-driven mute/bypass inside the engine subgraph)ComfyUI-MiniMax-H3-TurboH3 memory-efficient Sage Attention patch, Turbo samplerComfyUI-Spectrum-MiniMax-H3optional Spectrum accelerator (off by default)
EasyCache, MiniMaxH3SigmaShift and MiniMaxH3ImageToVideo are ComfyUI core — no install needed.
Models
MiniMax H3 (video + audio)
diffusion_models/ minimax_h3_fl2va_pruned_int8_convrot.safetensors
text_encoders/ qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors
vae/ minimax_h3_video_vae_fp16.safetensors
vae/ minimax_h3_audio_vae_fp32.safetensors
vae_approx/ taeh3.safetensors (live preview only, optional)
loras/ minimax_h3_turbo_v4_step600_ema_pruned_comfyui.safetensorsKrea 2 (reference still)
diffusion_models/ a Krea 2 checkpoint (I use redcraft23INT8INT4FP8_30Krea2)
text_encoders/ qwen3vl_4b_bf16.safetensors — CLIPLoader type must be "krea2"
vae/ qwen_image_vae.safetensorsLLMs → models/LLM/
Huihui-Qwen3.5-9B-abliterated.Q8_0.gguf
Huihui-Qwen3.5-9B-abliterated.mmproj-Q8_0.gguf (vision projector, required)
Qwen3.5-4B-Q4_K_M.gguf (titler)System prompts → models/LLM/prompts/
MinimaxH3_VideoAudio.txt video enhancer
Titler.txt filename slug generatorDownload the system prompts separately and drop them in your models/LLM/prompts folder
Character LoRAs in both LoRA loaders are mine — swap in your own or switch them off.
How a run works
Krea 2 module ─→ Reference Image Source ─→ MODE switch ─┬─→ H3 engine ─→ Save Video (mp4)
│ └─→ First Frame ─→ Save Image
Video Prompt ─→ Prompt Enhancer ─→ Review/Edit ─→ LLM Prompt switch ─┘
└─→ Titler ─→ filenamesWrite two prompts. The Image Prompt describes what the opening frame looks like. The Video Prompt describes what happens — action, dialogue, lyrics. They are separate on purpose.
Press Run. Krea 2 samples the still and the workflow stops at Preview & Approve.
Regenerate until happy, then Continue.
The approved still goes to the engine's
first_frame, to the video enhancer as visual context, and toinput/Krea2_Reference.png. The video renders and both outputs save with generated filenames.
Set the Pause gate to Pass to run end to end without stopping.
The four controls
MODE (A / B) A = image-to-video. B = text-to-video — bank B's image rows are deliberately unwired, so first_frame and the enhancer's image both arrive empty and H3 runs t2va. The entire image branch is skipped: nothing loads, Krea 2 doesn't sample.
Reference Image Source (1 / 2) 1 = Load Image from disk. 2 = the Krea 2 still. Only relevant in MODE A.
Video Resolution Source (A / B) A = native size of the active reference image. B = the size set in Sizes. Ignored in MODE B. If the image branch is muted it falls back to B by itself.
LLM Prompt (bool) true = engine gets the enhanced prompt. false = your raw text goes straight through, unenhanced.
Plus a Module Switch that mutes whole groups — use it to disable the Krea 2 module without rewiring.
Defaults as shipped
sampler euler / beta, 8 steps (turbo LoRA @ 1.0)
size 768 x 1056 portrait
duration 10 s @ 24 fps = 243 frames
output H.265 mp4, 10-bit, audio muxed
on Sage Attention
off MemCache, Spectrum, RTX Upscale, VRAM UnloadCredits
MiniMax H3 by MiniMaxAI. Krea 2 by Krea. ComfyUI native H3 support by comfyanonymous and contributors. Node packs by pixaroma, kijai, rgthree, DaSiWa, WASasquatch, and the MediaMixer, LLM-text-processor, H3-Turbo and Spectrum authors. The system prompt files are mine and free to reuse.
Description
GALATEA v1.1 — Movie Maker
MiniMax H3 video with native audio, a Krea 2 still generator, and three LLM modules that turn one clip into a film
Pygmalion carved a statue and it came to life. v1.0 did that in one queue. v1.1 gives it a script, a memory, and a face it keeps.
What changed since v1.0
v1.0 made one clip: Krea 2 sculpts the opening still, MiniMax H3 animates it and gives it a voice, all in a single run. That engine is untouched. Open v1.1, press Run, and you get exactly what v1.0 gave you.
What is new is everything around it — three optional modules that make the clip part of something longer:
1 · Movie script generatorOne line of premise → an N-part shooting script, with a Krea 2 image prompt and a video prompt already written in the right house style for every part2 · Character sheetA reference photo → a locked identity paragraph you reuse verbatim, so the face stops drifting between parts3 · Continuity writerThe previous clip's last frame + the prompt it actually used + the script → the next part's prompt, written to start from the exact pose in that frame4 · Reference-to-videoThe photo goes into the H3 conditioning as <Picture 1>, pinning identity independently of the first frame5 · Last frameThe chaining plumbing, entirely automatic
Continuing a clip is one number. Every render writes Last_Frame.png and Last_Prompt.txt into your input folder; planning a movie writes Movie_Script.txt. The continuity writer is pointed at all three permanently. To make part 3, you type PART TO WRITE: 3, flip two switches, and Run. Nothing is copied, pasted or re-picked.
All three modules ship muted. They each load a 9B model, and you only want them when you are using them. One Module Switch panel turns them on and off.
Why the continuity module exists
Feeding the last frame back in as a first frame is easy and it is not enough. Write a fresh prompt over it and the model re-stages the scene: new pose, new angle, subtly new face. The clip starts, rather than continues.
So the continuity writer is a vision model with one job. It reads the frame before it writes a word — wardrobe and its exact state, hands and what they hold, the eyeline, the light's direction and colour temperature, the lens feel, the camera height — and reports what it saw in a CONTINUES FROM: header you can check. Then it writes the next part with the first movement starting from the pose actually in the picture, no cut and no re-establishing shot at frame 0, and the previous part's camera-and-grade wording carried through word for word.
It also gets Last_Prompt.txt, which is what actually rendered, not what the script said would render. Where the two disagree, the render wins.
Its output is a specification, not a finished prompt, so it still passes through the v1.0 video enhancer and comes out in H3's three-section format like everything else.
Why the script generator exists
Multi-part consistency is mostly a prose problem. Parts drift because each one describes the same person, place and camera in fresh words, and fresh words render as a different person.
So the script writer emits a STORY BIBLE — locked character descriptions, a wardrobe lock, a location lock, and one camera-and-grade sentence — and then repeats that sentence verbatim inside every part's video prompt. The repetition looks redundant on the page. It is the thing that makes N clips look like one film.
It also budgets against the medium rather than against vibes: beats per part from your clip length, spoken words from ~2.5 words/second, one location and one lighting state per part unless a change is performed on screen, and every part's opening state matched to the previous part's stated end frame.
Why there are two ways to lock a face
The text lock costs nothing at render time. A vision model reads your reference photo once and returns a SHORT TAG, a FULL DESCRIPTION, WARDROBE AS SEEN and five DO NOT DRIFT checkpoints. Paste it into the script settings and every part describes the same person in the same words. This alone fixes most drift.
The engine lock is real reference-to-video. The H3 subgraph now holds two conditioning nodes behind one switch:
ENGINE COND A = MiniMaxH3ImageToVideo (default, v1.0 behaviour)
B = MiniMaxH3HybridRefAndKeyframe (R2V + I2V in one payload)On B, your photo becomes <Picture 1> alongside the normal first-frame keyframe. They do different jobs — the first frame pins composition and opening pose, the reference pins identity: face, colour, wardrobe, proportions. Point the prompt at it (<Picture 1> is the authoritative source for her face and wardrobe; preserve her identity exactly) or it will be ignored.
The switch is lazy, so the unselected conditioning node never executes and costs nothing. A spare ref_image_2 slot is wired through for a <Picture 2> — a second character, a prop, a style plate.
Long chains soften faces because each clip re-encodes the one before it. Turning ENGINE COND to B re-anchors identity to the original photograph instead of to the previous clip, which is the cure.
FAQ
Comments (2)
wanna test your WF, but no matter which downlaod button i click i can only downlad
galateaMinimaxH3VideoNative_systemPrompts.txt
can't download Titler.txt.
Civit shows different file names and sizes, but somehow it doesn't switch to Titler
What are your computer specifications that you make such long videos?