ComfyUI Node
Signs to Ideogram Caption
SIGN_DATA -> Ideogram 4 caption JSON. Wire `caption_json` into Ideogram4PromptBuilderKJ's `import_json` and set `import_mode` to 'always' — the builder's own elements_data is re-serialised from the browser at queue time, so any other route is silently overwritten.
Signs to Ideogram Caption
- sign_data
- image
- caption_json
- box_prompts
- mask
- bboxes
- width
- height
- report
◄high_level_description►
◄background►
◄lookphotographic►
◄text_inset0.07►
◄mask_pad_px4►
◄empty_too_smalltrue►
◄min_word_px0►
◄fallback_text►
◄auto_scenetrue►
◄lm_base_urlhttp://localhost:1234/v1►
◄lm_model_idqwen3-8b-vl-instruct-abliterated►
◄surface_hint►
CategoryFVMtools/signs
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| sign_data | SIGN_DATA | From Sign Text Proposer (or the selector, if you supply the words yourself). | |
| image | IMAGE | The image the selector scanned. Only its size is used, to convert boxes into Ideogram's 0-1000 grid. | |
| high_level_description | STRING | One line about the whole picture. Blank is allowed. | |
| background | STRING | The scene around the lettering: light, weather, materials. This is what keeps the replacement in the same photograph as the rest of the frame. | |
| look | COMBO | photographic | Ideogram drifts towards poster art unless told otherwise. Use 'flat graphic' only when the source genuinely is one. |
| text_inset | FLOAT | 0.070–0.45 | How far the TEXT box sits inside the region. The mask stays full size. A box that reaches the edge of a surface puts letters past that edge. |
| mask_pad_px | INT | 40–64 | Extra mask around each region. Err high: what the mask misses is restored unchanged and stands there as leftover scribble. |
| empty_too_small | BOOLEAN | true | Regions the selector judged too small for a readable word are described as blank instead of being written on. Off: every region gets a word, which produces letter-like shapes that count as invented text. |
| min_word_px | INT | 00–200 | Box heights below this get no word — the surface is described as blank instead. 0 turns the test off. The selector has its own height floor, but it measures the region BEFORE the line splitter cuts it into bands, so a 90px sign split into four passes the selector and arrives here as four 20px strips that the splitter only checks against its own 8px 'is this a line at all' bar. This is the last station before the caption and the only one that sees the geometry that will actually be rendered. |
| fallback_text | STRING | Used for a region the proposer left without a word. Blank means that region is emptied. | |
| auto_sceneopt | BOOLEAN | true | Look at the picture and write the scene description itself when the two text fields above are empty. That is what lets the graph run from nothing but a chosen image. |
| lm_base_urlopt | STRING | http://localhost:1234/v1 | LM Studio endpoint for the scene description. |
| lm_model_idopt | STRING | qwen3-8b-vl-instruct-abliterated | Name it. 'Whatever is loaded' is not a default, it is a silent failure: LM Studio lists models it has not loaded, the call returns nothing, and the run continues with an empty description. Must be a VISION model. |
| surface_hintopt | STRING | Per class, one per line, 'class: description'. Overrides the built-in wording for that class. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| caption_json | STRING | — |
| box_prompts | STRING | — |
| mask | MASK | — |
| bboxes | BOUNDING_BOX | — |
| width | INT | — |
| height | INT | — |
| report | STRING | — |