H3 Constrained Semantic Planning
The node whose job is to admit nothing was planned
- reduction
- plan
- semantic_planning
- accepted_plan
Here's a node that looks like an empty pass-through and is actually one of the more interesting pieces of the pack. It takes a plan, hands the same plan back out, and in between it writes down an explicit refusal: no semantic enrichment happened, here's the reason, and here's the chain we stopped at.
If you've used LLM-assisted prompt nodes before, you know the failure mode this is built against. An "enhancer" runs, invents detail you never asked for, and nothing in the graph records that the model added anything (llm-in-comfyui.md). This node makes that addition visible - which, in this build, means it makes its absence visible.
What it does
The docstring is precise: "Records unavailable enrichment and materializes the accepted planning chain." Two outputs fall out of that.
semantic_planning is a structured disposition record - the pack's semantic-planning schema, carrying a status of unavailable plus a diagnostic of profile_unavailable and a human-readable reason ("selected profile is unavailable" by default). That's the receipt: a machine-readable statement that the model-driven step was skipped deliberately rather than silently.
accepted_plan is the exact plan that came in, unmodified. It's the "authorized manual plan" - the same H3_CONTEXT_PLAN type the H3 Context Compiler consumes, so this node can sit in the chain without changing what the compiler sees.
The module behind it is strict about scope. It parses one JSON document, validates it against the accepted reduction and timeline hand-off, emits an immutable revision receipt, and explicitly never calls a model, never imports ComfyUI or Ollama, and never authors the final H3 protocol text. The model, when one is wired, is a proposal engine - proposals get validated against the evidence, not trusted.
Inputs and outputs
Two required inputs, and they tell you where this node belongs:
- reduction, typed
H3_HIERARCHICAL_EVIDENCE_REDUCTION- the output of H3 Hierarchical Evidence Reduction. - plan - a manual, deterministic
H3_CONTEXT_PLAN, almost always from H3 Context Plan.
So this is the back half of the "expensive" route: admit media → fuse evidence → cross-reference → resolve directives → plan a feasible timeline → reduce the evidence → then declare what semantic planning did or didn't do with it.
Outputs are semantic_planning and accepted_plan, as above. Neither is a prompt; you still need the Compiler downstream.
Why you'd reach for it
Two honest reasons. The first is compliance-shaped: your plan went through a chain of producer nodes, and you want the pipeline to state on the wire that the prompt is entirely human-authored. That's a real thing to want when you're handing a workflow to someone else, or when you're trying to work out whether a bad generation came from the model or from an LLM that quietly rewrote your intent.
The second reason is that this node is a mandatory link if you're building the full deterministic route that terminates at H3 Local Reconstruction Acceptance. That acceptance gate expects the whole chain to be present and current, and semantic_planning is one of the stages it checks. Skip it and the reconstruction refuses - which is the pack's general posture: you can't claim an end-to-end route if a stage is missing.
Install
Same as the rest of the pack - manual clone, because it isn't in the registry yet:
cd ComfyUI/custom_nodes
git clone https://github.com/rookiestar28/ComfyUI-MiniMaxH3-Studio.git
# restart ComfyUI
Zero Python dependencies declared, no model downloads at install, prebuilt browser extension. Python 3.10+. If you want to see this node working without a ComfyUI canvas at all, the repo's examples/minimal_core_pipeline.py runs the core pipeline in plain Python, and the workflows/ folder has API-format examples covering this whole downstream group.
What it doesn't do
It won't improve your prompt. It won't summarise, shorten, rewrite or infer. Given a plan with missing semantic detail, it passes that hole straight through rather than filling it - the compression and selection work belongs to the reduction stage upstream, and the "how do I actually want this shot to read" work belongs to you.
That can feel like a node that does nothing, and for a single-clip workflow, it basically is one. Where it earns its place is in the long chain, as the stage that keeps "the model suggested this" and "I decided this" from becoming the same thing.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| reduction | H3_HIERARCHICAL_EVIDENCE_REDUCTION | — | |
| plan | H3_CONTEXT_PLAN | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| semantic_planning | H3_CONSTRAINED_SEMANTIC_PLANNING | — |
| accepted_plan | H3_CONTEXT_PLAN | — |