JR MiniMax H3 Director Desk
A timeline editor inside a ComfyUI node — no LLM required
- director_prompt
- pip
The JR H3 Director Desk is the closest thing this pack has to a centerpiece: a multimodal timeline editor that lives inside a ComfyUI node, with lanes for shots, images, video, audio, per-item directions and notes. You drag things around in the node's own UI, and it deterministically compiles everything into a raw director_prompt plus an immutable JR_H3_DIRECTOR_PIPE that flows downstream into the prompt optimizer and, eventually, the H3 conditioning node. The line to remember is in the brief: this node does not call an LLM. Everything is compiled locally and in a fixed order - which is exactly why it's deterministic and why it can't hallucinate your scene structure for you.
H3 is MiniMax's 33B omni-modal video model - one context covering text, image, video and audio, with native stereo audio generated jointly rather than bolted on. A workflow for it wants to describe a whole scene, not just a prompt string. That's what the Director Desk is for: instead of writing one wall of text, you lay out a timeline and let the node structure the description for you.
What comes out and where it goes
director_prompt (STRING) is the compiled raw prompt - a monitoring/debug string. The thing you actually wire forward is the pip output of type JR_H3_DIRECTOR_PIPE. That pipe is the authoritative data bus for the whole director chain: it carries the compiled prompt, duration, media registry and assets, and every downstream node (Prompt Optimizer, Prompt Review & Continue, Directed Video Conditioning) consumes or extends it without mutating the upstream one. The final prompt priority is fixed: reviewed > optimized > director.
The input that looks scary
The only required input is director_state_json, a big multiline STRING whose default value is a JSON timeline (duration, fps, shots, visual/audio items, UI state). You almost never hand-edit it - the node's own front-end edits that state and feeds it back. It's the serialization format the node uses to persist your timeline inside the workflow file, which is a nice trick: the workflow JSON stays small because it stores a lightweight timeline plus asset descriptors rather than tensors or base64 media. First Frame is a single point anchor at 0.0s; Visual and Reference Audio can overlap, but Driving Audio clips cannot.
Install
Part of the ComfyUI_JR_MiniMaxH3Node pack, so install once for all 16 nodes. From ComfyUI Manager search ComfyUI_JR_MiniMaxH3Node, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Goldlionren/ComfyUI_JR_MiniMaxH3Node
<your-comfyui-python> -m pip install -r ComfyUI_JR_MiniMaxH3Node/requirements.txt
Use the same Python as ComfyUI, restart, and do a hard browser refresh - the desk is one of the nodes with real front-end JavaScript, and stale caches cause "where's my timeline?" confusion.
Troubleshooting
- The timeline UI doesn't show up after updating. Hard-refresh the browser (Ctrl+Shift+R). The README calls this out explicitly for the preview and review UIs.
- The node shrinks back to a tiny box. It shouldn't - the front-end only applies its ~1000×650 default on first creation and won't shrink what you've resized. If it did, that's a stale-UI symptom again; refresh.
- Conflicts when you connect legacy inputs downstream. If you wire old
first_frame/last_frame/ref_image_1..9inputs into the optimizer alongside the pipe, the optimizer will raise an explicit conflict rather than silently merging. When a pipe is connected, the pipe's timeline is authoritative.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| director_state_json | STRING | {"schema":"jr_h3_director_state","schema_version":1,"timeline":{"duration_seconds":10.0,"fps":24.0},"global_direction":"","shots":[{"id":"shot-1","start":0.0,"end":10.0,"direction":"","notes":""}],"visual_items":[],"audio_items":[],"ui":{"selected_item_id":null,"inspector_tab":"item","zoom":1.0,"lane_order":{"visual":[],"audio":[]}}} | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| director_prompt | STRING | — |
| pip | JR_H3_DIRECTOR_PIPE | — |