Nodes/ComfyUI-Texturaizer/Get Prompt Data (Texturaizer)
ComfyUI Node

Get Prompt Data (Texturaizer)

Blender's per-object prompts, finally usable in ComfyUI

By LatentSpaceDirective·Created 2 years ago·Updated 8 months ago· 22
Get Prompt Data (Texturaizer)
  • data_optional
  • pos_g
  • pos_l
  • neg
  • data_hash
directory_optional

If you've landed here, you're almost certainly using Texturaizer - the Blender addon that hands ComfyUI a per-object AI pipeline - and you're staring at a graph full of Get * Data nodes wondering which one actually holds your prompt. This one does. Get Prompt Data is where the positive and negative text you typed in Blender's scene editor finally becomes a STRING ComfyUI can shove into a CLIP Text Encode node.

Texturaizer is a paid Blender addon by Luke Kratsios (LatentSpaceDirective) that exports each object, material, and collection as a folder full of render passes plus a data/ai_data.json. These ComfyUI nodes are the free, open-source side of that deal: they read that JSON and turn it into native ComfyUI types. This node is the text half of the read.

What it does

When Blender exports a save, it writes data/ai_data.json into the object's directory. Get Prompt Data opens that file and pulls out three strings:

  • pos_g - the global positive prompt, applied to the whole render
  • pos_l - the local positive prompt, the one assigned to this specific object or material
  • neg - the negative prompt

Wire pos_g and pos_l each into a CLIP Text Encode and you've got the exact same two-conditioning setup you'd hand-build by hand, except the prompts are coming from Blender and will change every time you re-export. That's the whole point: you edit the prompt in the 3D viewport, hit render in Blender, and the ComfyUI graph follows along.

The inputs that matter

Only two optional inputs, and you'll usually touch one:

  • directory_optional - a path to the object's save folder. If you leave it empty, the node falls back to whatever Set Global Dir (Texturaizer) has stored as the shared directory.
  • data_optional - a DICTIONARY. If you feed one in, it's used instead of reading from disk. Handy when another node already parsed the JSON and you don't want the file read twice.

The fourth output, data_hash, is the one beginners ignore at their peril. Every Get * Data node computes an MD5 hash of what it read and feeds it back through IS_CHANGED, so ComfyUI re-runs the downstream graph the moment the JSON changes. It's also a nice debugging signal: hash changed → Blender's export actually landed.

How to install it

You're installing the whole pack - there's no standalone download for this node.

  • ComfyUI Manager (easiest): search "Texturaizer" in Manager, hit Install, restart ComfyUI.
  • Manual: cd ComfyUI/custom_nodes && git clone https://github.com/LatentSpaceDirective/ComfyUI-Texturaizer, then restart.

Good news on dependencies: the pack's requirements.txt is just torch, scipy, numpy, Pillow, torchvision - all of which ship with ComfyUI anyway. No model downloads, no missing .safetensors, nothing to hunt down. The nodes themselves are free; it's the Blender addon you pay for on Gumroad.

Where people get burned

The classic mistake is forgetting to wire Set Global Dir, leaving directory_optional empty, and getting nothing but empty strings out. The node silently returns blanks rather than erroring when it can't find a path, which is the most confusing failure mode in this whole pack. Set the global directory first, or pass an explicit path.

Also worth knowing: pos_g/pos_l coming out as separate strings is deliberate. Texturaizer's whole segmentation workflow relies on the local prompt being different per object - that's the regional-prompting idea (give each area its own prompt) turned into a batch pipeline. If you only care about a single prompt, just use pos_g and leave pos_l dangling.

Quick wiring

[Get Prompt Data] pos_g ──▶ CLIP Text Encode ──▶ positive
                  pos_l ──▶ CLIP Text Encode ──▶ (conditioning)
                  neg   ──▶ CLIP Text Encode ──▶ negative

That's it. Get this node right and the rest of the Get * Data family falls into place - they're all the same read-a-JSON-and-split pattern wearing different names.

CategoryTexturaizer

Inputs (2)

NameTypeDefaultDescription
directory_optionaloptSTRING
data_optionaloptDICTIONARY[object Object]

Outputs (4)

NameTypeDescription
pos_gSTRINGTexturaizer JSON data.
pos_lSTRINGHash value for debugging purposes.
negSTRING
data_hashSTRING