T8 H3 Visual Marker Config(空间标记增强·实验)
The off-by-default node that makes your marker boxes actually reach the prompt
- marker_plan
- visual_marker_config
You drew the boxes. You wired the marked image into H3's reference input. And then nothing changed, because the node that turns those boxes into words was sitting there in its default 关闭 / Off state, which is exactly what the author intended.
T8H3VisualMarkerConfig ("空间标记增强·实验", marked experimental in the source, not just the docs) is the adapter between a marker plan and the H3 prompt enhancer. It is not a sampler, not a ControlNet, and it doesn't touch the audio plugin it can read plans from. It takes a plan, sanity-checks it, and forwards it down a dedicated socket on the enhancer node. That's it. The load-bearing work happens in the enhancer, and this node is the permission slip.
What the switch actually does
Off returns a two-field stub, the enhancer resolves it to nothing, and every existing message and call path stays byte-identical - including images you wired in yourself. Off skips the plan dependency, not your media.
On is more careful than you'd expect. It reads the plan's record, verifies the marked tensor's pixel hash still matches the hash recorded when the plan was built, then embeds the whole record. When the enhancer later runs it re-finds the reference image whose pixels are identical to that hash, freezes a read-only copy as the actual request image, and injects two text blocks into the LLM request: a rules block, and the marker JSON quoted explicitly as user data. The rules block is the interesting part - it says xyxy describes the source image only, relation-array order is not timing, a repeated relation isn't a repeated action, boxes are annotations and not scene props, and role_id is not a speaker number. Without that, an LLM will happily turn your flat rectangle into a hard trajectory.
That's why this is soft guidance rather than conditioning. ControlNet steers the sampler with a spatial map; here the rectangle becomes prose inside a rewritten prompt, and has to survive the H3 field grammar. Nothing downstream is binding.
The inputs
mode - 关闭 / Off (default) or 开启(实验) / On (experimental). Two options, that's the lot.
picture_selector - 0 means "find the unique exact-match Picture automatically". If the same marked image appears more than once, name the actual H3 enhancer Picture number here. The tooltip is worth quoting: it is not the downstream Bind node's marker_position. Keyframes claim Picture slots first, so in a Hybrid graph your first frame is <Picture 1> and the marker becomes <Picture 2>.
marker_plan (optional) - connect T8H3SpatialMarkerCanvas.marker_plan, or the existing audio plugin's H3 Marker · Prepare plan. It's a lazy input, so it only evaluates when the mode is On - which is why old workflows don't break.
One output: visual_marker_config, wired into the H3 enhancer's last socket, labelled 空间标记增强(可选·实验) / Visual marker. Only the H3 node has that socket - Seedance, MOSS and the music nodes don't.
Wiring, and the one ordering trap
The marked image goes into the enhancer's ordinary reference-image input and the plan goes into this node. Both. The node never inserts, reorders, resizes or crops media, and never guesses which Picture you meant.
Canvas/Prepare.marker_plan ──► Visual Marker Config ──► H3.visual_marker_config
Canvas/Prepare.marked_image ───────────────────────────► H3.reference_images
If you also feed the audio plugin's Bind node, keep the orders identical and insert the marker exactly once - the enhancer sees first, last, refA, marker, refB, so Bind wants marker_position=2 while this node wants picture_selector=4.
Install
Same pack, nothing extra to download - no models, no keys for this node:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-prompt-enhancer-T8
Or install MiniMax H3 / Seedance 2.0 / Music 3 Prompt Enhancer (T8) from ComfyUI-Manager, then restart and Ctrl+F5. Searching "Visual Marker Config" finds it too. Cloud mode adds no Python dependencies; it uses ComfyUI's own requests/NumPy/Pillow stack.
Errors you will actually see
找不到相同标记参考图 / No matching marker reference is the common one, and it's always the same story: the pixels reaching the enhancer aren't the pixels the plan was hashed from. A resize, a crop, a JPEG re-encode between canvas and enhancer, or the wrong Picture number.
Multiple matching pictures means the same marked image is wired twice - set the selector honestly.
Use Normal Ref2VA/Hybrid extra references; Relay/keyframe-only are not supported - On is limited to plain Ref2VA and Hybrid with the marker as an extra reference. Turn the mode off and those tasks behave as before.
Marker pixels changed / Source pixels changed means rebuild the plan. Marker descriptions also pass the same API-key-shaped-text check as the main prompt, so a pasted key in a box gets rejected before any paid call.
Worth it?
Honestly: this is the fiddliest corner of an already busy pack, and the author is upfront that video-side benefit is unproven - you get structure, not a guarantee, and downstream_verified stays false even when the wiring is correct. Single-subject shots? Skip it. Fighting two actors and a doorway? Draw the boxes and flip the switch. Then A/B it: same image, same idea, same duration, same seed, Off versus On. There's almost no independent write-up of this pack, so nobody's handing you a verdict - and a test you ran yourself beats one you read.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | 关闭 / Off | 2 options: 关闭 / Off, 开启(实验) / On (experimental) |
| picture_selector | INT | 00–11 | Select an actual H3 enhancer Picture, not Bind.marker_position. Pixels must still match; no automatic media insertion. |
| marker_planopt | T8_H3_VISUAL_MARKER_PLAN | Connect the existing H3 Marker Prepare.marker_plan, and its marked_image to H3 reference_images. Cloud enhancement receives the image and marker text. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| visual_marker_config | T8_H3_VISUAL_MARKER_CONFIG | — |