H3 Directive Authority Producer
Keep the face, change the jacket
- request
- reference_registry
- hard_constraints
- hard_constraints_report
- intent_graph
- intent_report
- directive_authority
- producer_report
"Use the reference, but keep her face and don't keep her clothes" is the sentence that reference-to-video workflows are all about, and it's the sentence a model will misinterpret if nothing in your pipeline has written down which part of the reference is authoritative. That's this node's whole job: turn one reference decision into a typed directive with an owner, a target and a priority.
What it does
It builds a directive authority bundle for a Ref2VA request. Note the constraint: the node's core validates that the incoming request is mode REF2VA and refuses anything else with "directive authority requires an exact REF2VA request." Reference-set video is where "which part of this reference wins" is a real question; T2VA has no reference to argue about.
The mechanics are deliberately narrow. The node validates each connected input is an exact typed value, checks that the report you passed in actually belongs to the value it came with, and then - only if you supplied an action and a target - constructs a single manual directive. That target has to exist: the node resolves your target_id against the subjects, actions, scenes and assets already present in the intent graph, and refuses with "manual directive target is not present in the intent" if it can't find it. No text-matching a description out of the prose. If the subject isn't in the graph, the graph is what you fix.
Then it resolves that directive set and returns the resolved bundle plus the authority report that explains each decision.
Inputs and outputs
Required inputs, and yes, it's a lot of them - this is an assembly node, so it consumes the whole upstream chain:
- request - the
H3_CONTEXT_REQUEST, which must be Ref2VA. - reference_registry - from H3 Reference Registry.
- hard_constraints plus hard_constraints_report - from H3 Hard Constraint Producer.
- intent_graph plus intent_report - from H3 Intent Graph Producer.
The widgets are where your decision lives:
- action -
none(default),retain,adapt, orexclude.nonewith an empty target is a valid no-op build. - target_kind -
subject,scene,action, orasset. Pick what you're talking about. - target_id - the id from the intent graph for that target.
- source_asset_id - which admitted asset the directive is about.
- retention_aspect - what you're keeping, when you keep something:
identity,style,camera,audio,voice,scene,action,object. - adaptation - free text describing the change, for an
adaptaction. - exclusion_reason - why something is being dropped, for
exclude. - authority - whose word this is:
user_hard,user_preference,reference_onlyorassisted_proposal. That ordering is a precedence ladder, from immutable caller intent down to untrusted machine suggestion. Defaultuser_preference. - priority - 0 to 1000, for when you have more than one directive.
Outputs: directive_authority (H3_DIRECTIVE_AUTHORITY) and producer_report. Both go downstream - the timeline planner and the acceptance gate both want the pair.
Install
Straight clone, since the pack isn't in the registry:
cd ComfyUI/custom_nodes
git clone https://github.com/rookiestar28/ComfyUI-MiniMaxH3-Studio.git
# restart ComfyUI
Surprisingly light for what it does: no Python dependencies declared, no model downloads at install time, and the sidebar extension ships prebuilt. Python 3.10+. You'll want the reference workflow examples in the repo's workflows/ folder - m15_02_downstream_minimal.json wires this node with the exact input set above, which saves you half an hour of guessing which report goes with which graph.
Practical notes
Set action to none and leave the target blank if you have nothing to say. A half-filled directive - an action with no target, or a target id that doesn't exist in the intent - is a hard error, not a warning, so build the intent graph first and read its ids out of there.
The authority widget is the one people underuse. If a constraint came from the client, user_hard is not decoration; it's how the pipeline knows which instruction wins when your assisted-authoring suggestion disagrees with it. And if you're generating the same look repeatedly - same character, different wardrobe each clip - the directive is exactly the thing worth copying between workflows, because it encodes the decision instead of leaving it in your head.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| request | H3_CONTEXT_REQUEST | — | |
| reference_registry | H3_REFERENCE_REGISTRY | — | |
| hard_constraints | H3_HARD_CONSTRAINTS | — | |
| hard_constraints_report | H3_DOWNSTREAM_PRODUCER_REPORT | — | |
| intent_graph | H3_INTENT_GRAPH | — | |
| intent_report | H3_DOWNSTREAM_PRODUCER_REPORT | — | |
| action | COMBO | none | 4 options: none, retain, adapt, exclude |
| target_kind | COMBO | subject | 4 options: subject, scene, action, asset |
| target_id | STRING | — | |
| source_asset_id | STRING | — | |
| retention_aspect | COMBO | identity | 8 options: identity, style, camera, audio, voice, scene, +2 |
| adaptation | STRING | — | |
| exclusion_reason | STRING | — | |
| authority | COMBO | user_preference | 4 options: user_hard, user_preference, reference_only, assisted_proposal |
| priority | INT | 00–1000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| directive_authority | H3_DIRECTIVE_AUTHORITY | — |
| producer_report | H3_DOWNSTREAM_PRODUCER_REPORT | — |