arkennemasis Hailuo Scene (one clip, start to finish)
One scene, start to finish, and not an ounce of VRAM more
- model
- clip
- vae
- audio_vae
- sampler
- sigmas
- image
- last_frame
- video
- path
ArkHailuoScene renders ONE scene end to end with Hailuo MiniMax H3 - condition, sample, decode video and audio, mux and write the file - then frees everything. It's the "one scene at a time" node that makes the arkennemasis video chain's per-scene loop hold memory at a single scene instead of accumulating every scene's latents until the graph runs out of VRAM.
It wraps the full H3 pipeline into a single node: video VAE, audio VAE, sampler, sigmas, and the scene's first-frame still go in, a finished VIDEO file comes out. That "then free everything" is the part people underrate - inside a loop that renders scene after scene, it's the difference between a 12-scene film fitting in 16GB and dying at scene four.
The inputs that matter
The model-side inputs are model, clip, vae (the video VAE), audio_vae (the audio VAE - the thing that gives the clip its soundtrack; H3 generates audio natively, which is why there are two VAEs), sampler, and sigmas - wire them from the pack's Video Model setup or any standard H3 nodes.
The scene-side inputs are where the workflow lives:
image- this scene's still, the first frame of the clip.prompt- the scene's text.width/height- 1280×736 by default.length- frames for this scene, wired from Scene List so each clip runs its own duration. It'sforceInputon purpose: a widget carrying a link occupies a widgets_values slot, and slot-count disagreement shifts every later value in saved workflows. (This pack is religious about not corrupting saved graphs, and it shows.)seed- a base seed, mixed with this scene's prompt, so every scene of a run samples differently instead of all sharing one noise pattern.reseed_each_run- default on: draw fresh noise every run. Off reproduces the same clip down to the audio - including the same garbled speech, which the tooltip warns "looks like the scene is locked." Turn it off only to reproduce a specific take exactly.filename_prefix- relative to ComfyUI's output dir; each call appends the next counter so clips land in scene order.last_frame- optional closing frame. Give it one and H3 animates the transition from the first frame to this one instead of inventing motion from a single still. That's the first-frame-to-last-frame transformation.
Outputs: video (the VIDEO type) and path.
A licensing note worth knowing
H3's open weights ship under the MiniMax H3 Community License, which geofences out the US, EU, UK and South Korea - users in those regions are not licensed to run the local weights at all (the hosted Hailuo API remains globally available). That's a real constraint on who can legally use this node, and it's the kind of thing worth checking before you build a production pipeline on it. The pack doesn't hide it, and neither should you.
Installing
It's part of comfyui-arkennemasis:
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install replicate httpx
restart, under arkennemasis/Video. You'll also need the H3 model files and ComfyUI's own MiniMax H3 support in place - this node orchestrates them rather than shipping the weights.
Where people get burned: forgetting that length is a frames count on H3's 17k+5 frame grid (Narration Length exists precisely to compute this from a voice-over), and expecting the single-still mode to produce motion it wasn't asked for - no last_frame, and H3 invents the motion from the still, which is a coin flip you should know you're taking.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | The VIDEO vae. | |
| audio_vae | VAE | The AUDIO vae — this is what gives the clip its soundtrack. | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| image | IMAGE | This scene's still — the FIRST frame of the clip. | |
| prompt | STRING | — | |
| width | INT | 128032–16384 | — |
| height | INT | 73632–16384 | — |
| length | INT | 2435–2048 | Frames for THIS scene, wired from Scene List so each clip runs its own duration. forceInput on purpose: a widget carrying a link occupies a widgets_values slot and any disagreement about slot counts shifts every later value. |
| seed | INT | 10000–18446744073709550000 | Base seed. It is mixed with THIS scene's prompt, so every scene of a run samples differently instead of all of them sharing one noise pattern. |
| reseed_each_run | BOOLEAN | true | Draw fresh noise on every run. With this off, re-running an unchanged scene reproduces the SAME clip down to the audio - including the same garbled speech, which looks like the scene is locked. Turn it off only when you want to reproduce a specific take exactly. |
| filename_prefix | STRING | nemasis/scene | Relative to ComfyUI's output dir. Each call appends the next counter, so clips land in scene order. |
| last_frameopt | IMAGE | Optional CLOSING frame. Given one, H3 animates the transition from `image` to this, instead of inventing motion from a single still. This is what a first-frame-to-last-frame transformation needs. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| path | STRING | — |