Nodes/ComfyUI-JZL-MiniMax-H3/JZL - 🤖 MiniMax-H3短剧导演台
ComfyUI Node

JZL - 🤖 MiniMax-H3短剧导演台

MiniMax-H3 makes five-second clips. This node turns a paragraph into the whole short.

By wjluoxiao·Created 2 months ago·Updated 2 days ago· 127
JZL - 🤖 MiniMax-H3短剧导演台
  • model
  • clip
  • vae
  • audio_vae
  • 已处理剧本
◄run_mode🛠️ 故事拆解模式►
◄display_info分辨率:864x480丨每段帧数:124丨段数:剧情决定丨成片总长:124~6944 帧 ≈ 5.17~289.33 秒►
◄aspect_ratio16:9 (Widescreen)►
◄megapixels0.4►
◄duration固定5秒►
◄scale_factor1.0►
◄upscale_scale1.0►
◄video_count0►
◄story_style禁用风格►
◄story_name机智罗►
◄internal_prompt—►
◄manager_settings►

MiniMax H3 is a 33B omni-modal model that generates 4–15 second clips with native synced audio. It's good at that, and it cannot make a two-minute short drama - no video model can. So a story means the boring path: decompose into shots, generate each, glue them together.

JZL - 🤖 MiniMax-H3短剧导演台 is that path as one node. Give it a story name and a natural-language story; an LLM breaks it into N segments with a fresh prompt each, then the node loops - encode, sample, optionally upscale and re-sample, decode, write the mp4, dump the VRAM, next. It's an output node, so it runs alone with no Save Video behind it.

What actually happens under the hood

The first half is text. In the default mode (故事拆解模式, "story decompose") a language model rewrites your prompt into blocks wrapped in [SHOT_START] … [SHOT_END] tags, each carrying the H3 prompt plus whatever scene, video and audio references that shot needs. Those blocks are the loop's unit of work - the node extracts them itself, not the segment count you typed.

The second half is a sampler loop. Per block: re-encode the references from scratch (so a face fed in at segment one is re-injected at segment nine instead of drifting), sample, optionally run the latent-upscale pass, decode audio and video together, write an mp4 into output/jzl/{your story name}/, then delete the tensors and clear the cache. The author's own promise: running 1 segment and running N segments are the same code path, and the footprint doesn't stack. Ten segments is not ten models in VRAM.

And the cuts are hard: no cross-segment latent guidance, no last-frame stitching. Each segment stands alone - right for a scene change, wrong for one unbroken take. That's the 无限时长 node.

The inputs that matter

  • story_name - mandatory; blank and the node hard-stops with 必须填写「故事名称」后才能生成. It's also your output folder and the handle the viewer nodes read.
  • run_mode - 故事拆解模式 generates video from a story. 故事扩写模式 only expands prose. 穿透生成模式 skips the LLM and samples prompts you already decomposed, one segment per [SHOT_START]. 仅提示词输出 stops before sampling - the cheap way to check the script.
  • aspect_ratio / megapixels / duration - canvas size and per-segment length. Resolution is MP × 1024², snapped to a multiple of 32; the read-only display_info line spells out the resulting width×height, frames and runtime.
  • video_count - 0 means "let the story decide": timeline length divided by segment duration. 1–60 pins it; ignored in passthrough mode, where tag count rules.
  • scale_factor / upscale_scale - reference enlargement and the second-pass latent upscale. Both default to 1.0, i.e. stock behaviour.
  • model / clip / vae / audio_vae - optional in the schema, load-bearing in practice. Without model+CLIP+VAE it still runs the LLM, then logs "仅完成剧本分段(未生成视频)": a script and zero video. Segments with video or audio references need audio_vae too.

internal_prompt holds the story text; a wired prompt beats it. The single output is 已处理剧本, the post-LLM script. Videos never leave the disk - the 生成视频查看器 node reads the folder.

Here's the trap: assets, LLM backend, sampler settings and save mode aren't in the widgets at all. They live in a JSON panel drawn by the pack's JavaScript and persisted into manager_settings, where you also pick local llama-server or an OpenAI-compatible API.

Installing it

cd ComfyUI/custom_nodes
git clone https://github.com/wjluoxiao/ComfyUI-JZL-MiniMax-H3
# restart ComfyUI

Check the folder shape immediately - the pack's headline warning: you want custom_nodes/ComfyUI-JZL-MiniMax-H3/__init__.py. Unzip one level too deep and ComfyUI logs Cannot import ... module for custom nodes and shows no nodes at all.

requirements.txt is light - Pillow, numpy, imageio-ffmpeg (your ffmpeg fallback for mp4 writing) - and no longer needs llama-cpp-python. It does need ComfyUI ≥ 0.29.0 for H3 support and working torch/torchaudio; the README recommends ≥ 0.37.0, reports 0.41.x tested. And you need H3 itself: ~42.5 GB under a licence that excludes the EU, UK, South Korea and the US.

For local LLM work, run the installer once, before your first generation:

cd ComfyUI/custom_nodes/ComfyUI-JZL-MiniMax-H3
python install_runtime.py            # --dry-run to just see the plan

That drops a pinned llama.cpp b10436 llama-server binary, run as a subprocess that dies with the job - the sane way to share a card with a 33B video model.

Where people get burned

"It ran but there's no video." Either model/CLIP/VAE aren't all connected, or a segment had a reference without an audio VAE. The console names the skipped segments.

Second pass blowing up. If the log says the temporal axis changed length after the upscale re-sample, that's a deliberate guard - turn it off.

LLM errors end the run. An expired key or a missing local model kills the job with ⚠️ LLM/API 出错. Run 仅提示词输出 first: one LLM call instead of N video generations tells you if the script half is sane before the expensive half starts.

CategoryJZL/MiniMax

Inputs (16)

NameTypeDefaultDescription
run_modeCOMBO🛠️ 故事拆解模式与「短剧导演台Max」一致:故事拆解模式=按情节拆解为N段(每段一个独立新提示词,多段按此逐段推进剧情);故事扩写模式=只扩写正文(纯文本输出);穿透生成模式=跳过 LLM 直接用提示词生成;仅提示词输出=只输出拆解+增强后的分段剧本,不生成视频
display_infoSTRING分辨率:864x480丨每段帧数:124丨段数:剧情决定丨成片总长:124~6944 帧 ≈ 5.17~289.33 秒只读显示:当前画幅/MP/时长/段数计算出的分辨率、每段帧数、段数、总帧数、总时长(对齐倍数固定 32)
aspect_ratioCOMBO16:9 (Widescreen)画幅比例(分辨率按 MP×1024² 公式自动计算,对齐倍数固定 32)
megapixelsFLOAT0.40.1–3.6总像素数(MP),画幅×MP 决定分辨率
durationCOMBO固定5秒每段视频时长(秒):固定 4~20 秒 或 区间。等同「剧本与镜头处理器」的每段视频时长
scale_factorFLOAT1.01–5参考图放大系数
upscale_scaleFLOAT1.01–4二采(Ref2va)放大倍数。二采结果只用于解码落盘
video_countINT00–60参数:0 = LLM 按剧情时间线长度,自动计算需要生成多少段视频。 参数:1~60 = 设置固定生成数量,最多支持一次生成60段视频! 🪄 穿透生成模式下忽略此设定:一律按提示词实际 [SHOT_START] 段数生成
story_styleCOMBO禁用风格故事风格(剧本处理器按此风格拆解与润色)
story_nameSTRING机智罗故事名称(用于保存命名 / 落盘目录 output/jzl/{故事名} / 生成视频管理)
internal_promptSTRING节点内编辑的提示词(提示词来源,随工作流保存)
manager_settingsSTRING本节点独立保存的完整配置 JSON(资产/增强/采样解码/保存),随工作流保存,节点间互不影响
modeloptMODEL—
clipoptCLIP—
vaeoptVAE—
audio_vaeoptVAE—

Outputs (1)

NameTypeDescription
已处理剧本STRING全部 LLM 处理后的剧本/提示词文本(供下游展示/保存用;「生成视频查看器」直接读盘)