T8 H3 手动空间画框 / Spatial Marker Canvas
You draw two boxes, and the H3 prompt finally knows which door you meant
- marked_image
- marker_plan
- source_image
- markers_json
- report_json
"Just describe it better" works right up until you have two people, one doorway, and a specific requirement that that person on the left walks through that door on the right. Words get you close. Rectangles get you closer.
T8H3SpatialMarkerCanvas - "T8 H3 手动空间画框 / Spatial Marker Canvas" - is the drag-a-box authoring tool for the T8 MiniMax-H3 prompt-enhancer pack. Upload a still, drag a rectangle over your actor, another over your target, write "walks through, keeps going", and it hands you back a burned-in annotation image plus a structured marker plan. Pure CPU. No model call, no API key, no dependency you don't already have.
Where this fits
The pack's main node is an LLM that rewrites your rough idea into MiniMax-H3's native prompt grammar - field order, shot numbering, speaker tags, the lot. Prompt enhancement is mainstream now (prompt enhancer mentions in the community corpus rose roughly twentyfold from 2023 to 2026), and H3 is a 33B omni-modal video model doing 4–15 second clips with native stereo audio and unusually strong instruction following.
The catch is that an enhancer can only be as spatial as your sentence. ControlNet solved this for image models by conditioning the sampler on a pose or edge map - "what" from the prompt, "where" from the map. This node doesn't. It conditions nothing. It gives the language model a description of where things are, hoping the rewritten prompt then says it out loud. Boxes as evidence, not constraint. Hold that distinction and the node makes sense; forget it and you'll expect magic.
How it works
Everything lives in the markers_json string: markers with an marker_id, a kind (person or target), a color, a description, an optional normalized xyxy box in 0..1 source coordinates - plus relations pairing an actor ID to a target ID with an action. You don't type any of it. Click the node's 🖱 手动画框 / Edit spatial regions button, drag boxes, fill fields, hit apply, and the JSON widget fills itself in.
On execute it validates the spec (2 to 64 markers, 1 to 128 relations, checked IDs, colors and geometry), converts each normalized box to integer pixels (floor-start, ceil-end), paints rectangle edges onto a copy of the source at your line_width, and hashes both images into a record. That record is blunt about itself: coordinate_space is source_reference_image_normalized_xyxy_not_generated_video, binding_verified is false. Your box describes the reference picture, not frame 40, not depth, not a trajectory.
The inputs that matter
image is a combo with an upload widget - files must already live in ComfyUI's input directory. One still frame, at least 2×2, and 4 megapixels maximum. It won't resize for you.
mode is render_rectangles (default: it draws the boxes) or provided_marked (you supplied an image that already has boxes on it, so the geometry is recorded as user-declared rather than rendered).
markers_json is auto-filled, and expected_source_sha256 is the guard that stops old boxes executing over a swapped image - change the picture under the editor and it errors instead of quietly drawing your doorway on the wrong wall. line_width is 1–32px and gets clamped so it can't exceed the box.
The outputs
marked_image goes into the H3 enhancer's existing reference-image input. marker_plan (a T8_H3_VISUAL_MARKER_PLAN) goes into T8H3VisualMarkerConfig. Those two wires are the whole point, and you need both - one is the pixels, one is the description.
source_image is the clean upload - what you want as a Hybrid workflow's first frame. It isn't de-boxed, just original. markers_json round-trips your spec, and is the escape hatch if you want to rebuild the audio plugin's Prepare plan from it. report_json gives counts, warning codes, model_calls: 0 and a permanent downstream_verified: false.
Install
Same pack, so if you already run any other T8 node you have this one - update and hard-refresh, because the editor lives in front-end JS:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-prompt-enhancer-T8
Or search MiniMax H3 / Seedance 2.0 / Music 3 Prompt Enhancer (T8) in ComfyUI-Manager. The author's own advice is to prefer git for updates: if the Registry copy is still a pending older version, Manager will cheerfully report success while you stare at a node with no drawing button. Restart, Ctrl+F5, and don't keep two copies in custom_nodes. Two examples ship with it: h3_spatial_canvas_ref2va.json and h3_spatial_canvas_hybrid.json.
Where people get burned
An empty canvas won't run. The validator wants at least one actor box, one target box and one relation - this is not a pass-through node you can leave blank "just in case".
The 4MP cap is the other one. A 4K screenshot gets rejected rather than downscaled, and the error text is Chinese-first, which reads like a crash if you aren't expecting it. Resize first.
And don't expect the rectangles to vanish. They're annotations burned into a reference image; writing "no boxes" in the prompt is a request, not a guarantee. If they bleed into the output, that's the honest failure mode of the technique, not a setting you missed.
One more thing: there's essentially no English-language chatter about this pack. Your documentation is the author's docs folder and the in-node 📖 示例与接线 popups.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 2 options: , example.png | |
| mode | COMBO | render_rectangles | 2 options: render_rectangles, provided_marked |
| markers_json | STRING | {"markers":[],"relations":[]} | — |
| line_width | INT | 31–32 | — |
| expected_source_sha256 | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| marked_image | IMAGE | — |
| marker_plan | T8_H3_VISUAL_MARKER_PLAN | — |
| source_image | IMAGE | — |
| markers_json | STRING | — |
| report_json | STRING | — |