曜石导演台 / Obsidian Director D1 (T8)
Obsidian Director D1 is a storyboard tool, not a generator — and that's the point
- compiled_prompt
- width
- height
- length
- media_map_json
- report_json
Big multi-shot H3 projects die in the same place every time: the prompt, the canvas, the frame count and the reference media for shot 4 drift out of sync with the graph, and you find out twelve minutes into a render. MiniMaxH3DirectorProjectT8 - the Obsidian Director D1 node - is the pack's answer, and it's a deliberately boring one. It validates a saved project and compiles a contract on CPU. It never queues generation.
What it really is
A disguised launcher. The actual director console is a real UI panel that the node's button opens (there's also a standalone T8 曜石导演台 entry in ComfyUI's left sidebar). The node itself is the on-canvas anchor: it holds your project snapshot and, at execution time, compiles one shot out of it.
In the graph you give it project_json (the saved project) and shot_id (a shot UUID). It compiles, then hands you six outputs:
compiled_prompt- the shot's actual prompt after alias resolutionwidth,height- the shot's canvas, already snapped to the 32-pixel gridlength- the aligned frame countmedia_map_json- which of your assets landed on which native slotreport_json- the full preflight report
Those are exactly the things people hardcode by hand and then forget to update, which is why they're outputs rather than settings.
How the compilation works
Inside the editor, you write prompt text with aliases - @image1, @video2, @audio1. Those resolve to the native conditioning slots <Picture N>, <Video N>, <Audio N> on compile. The mapping follows each asset's stable identity, not the order it appears in the list, and first/last frame images, a video's own soundtrack and standalone audio all compete for their own slot numbers. The media_map_json output is how you see what actually happened.
Uploaded assets are copied into the current ComfyUI's input/t8_director/<UUID>/, and project/asset manifests live under user/t8_director/. Same filename, different identity - that's the design, and it's why a missing or byte-changed file is a hard error rather than a silent substitution. If a file goes missing you re-link it explicitly by re-uploading and updating the references; nothing overwrites the old asset.
If the preflight doesn't pass, execute raises with the error list rather than returning something plausible. If you pass a shot_id that isn't in the project, you get a clear "pick a valid shot UUID" error.
Installing
ComfyUI Manager → MiniMax H3 Audio T8, or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Then fully quit and restart ComfyUI and refresh the browser - the director panel is a frontend extension, so a page refresh alone won't bring it up. The pack's requirements.txt installs nothing extra; the D1 layer loads no models at all, so you can build and preflight a whole project with no checkpoint resident.
Worth knowing: the D1 layer uses stock ComfyUI text and canvas inputs plus the pack's own asset store - no third-party manager nodes, no external DB. Your project files are ordinary JSON you can diff and back up.
The three export files, and not mixing them up
The editor writes three things and they are not interchangeable:
director.project.json- the editable project, including both prompt drafts and reference mappingsdirector-d1-preflight.workflow.json- a native ComfyUI CPU graph you can open, save and reload on the canvasdirector-d1-preflight.api.json- the API snapshot of that CPU graph
None of them is a GPU generation recipe. Generation belongs to D2, which submits through a separate Core service. A passing preflight means the project and its references compile - it does not mean your model is compatible, that it fits in VRAM, or that the output will look good.
Where people get burned
Per-file upload cap of 1 GiB. Over it, the upload fails with a message; it is not truncated. Convert to standard image / MP4 / WAV first.
Save is explicit. Drafts are per-tab, and if another tab has saved the project you'll get a conflict notice instead of a silent overwrite. Opening the director from the node prefers that node's snapshot; unsaved changes don't quietly replace it.
Returning to the canvas is not cancelling. D1 has no generation job to cancel, because it never made one.
Don't expect old workflows to be converted. Unknown legacy workflows are left alone rather than guessed at.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| project_json | STRING | — | |
| shot_id | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| compiled_prompt | STRING | — |
| width | INT | — |
| height | INT | — |
| length | INT | — |
| media_map_json | STRING | — |
| report_json | STRING | — |