Nodes/ComfyUI_MieNodes/Save Character Asset (Auto) 🐑
ComfyUI Node

Save Character Asset (Auto) 🐑

One Connector Away From Never Writing a Description Again

By MieMieeeee·Created 2 years ago·Updated 2 days ago· 269
Save Character Asset (Auto) 🐑
  • llm_service_connector
  • image
  • audio
  • name
  • description
  • voice
  • image
  • status
  • asset
◄library_dir►
◄name(下拉选择资产)►
◄description►
◄voice►
◄new_name►
◄image_upload►
◄audio_upload►
◄image_prompt►
◄voice_prompt►

You won't find Save Character Asset (Auto) 🐑 in the add-node menu. It's a hidden compatibility class from before the pack merged its asset nodes - the visible version is Save Asset (Auto) 🐑 with kind set to character. Old workflows still load this one and it does exactly what it always did; new graphs should use the merged node.

That said, this is the node that best explains why the Auto variants exist, because the character case is where the drafting pays off.

The idea: fill blanks, never rewrite

Save Character Asset (Auto) is Save Character Asset plus one input - llm_service_connector. Leave description empty and it drafts one from the picture: the same multimodal captioner the H3 prompt generator uses for reference images, writing 60–100 words of English identity description. Leave voice empty and it drafts that too, from the name plus the appearance it just wrote.

Crucially, fields you filled are saved verbatim. The LLM only fills blanks. If you've written three quarters of a description and want it finished, this won't; write the last quarter or clear the box and accept the model's version wholesale. That single rule is why the node is safe to drop into an existing library - it can't quietly overwrite the text you sweated over.

The voice catch

The voice draft is a text call. It cannot hear your audio sample - WAV, MP3, 96kbps or studio-grade, identical to it. It's inferring a plausible timbre from a name and a face.

So voice_prompt isn't optional in spirit, even though it's an optional input. It's the only channel for ground truth: elderly male, hoarse, slow pace, gravelly. Any language, and it goes in as an author note on the call. image_prompt is its sibling for the description call - mood, wardrobe, facts that must appear. Empty on both means the model works from the picture alone, which is fine for a stock character and wrong for the one you've been imagining.

The status output reports when fields were LLM-drafted, so the library stays self-documenting.

Inputs and outputs

name is the Existing/New toggle: 📋 已有资产 Existing picks an asset to overwrite, ✏️ 新建 New reveals new_name for creating one. Both mutually exclusive, and names are matched case-insensitively.

image and audio are sockets; image_upload and audio_upload are pickers into ComfyUI's input directory. Wired socket beats picker; both empty on an overwrite keeps the disk files. library_dir is vestigial and ignored at execution - the library root is fixed per machine.

Outputs: name, description, voice, image, status, asset. Wire asset into a character_N socket and the drafted text plus picture travel together.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/MieMieeeee/ComfyUI-MieNodes
pip install -r ComfyUI-MieNodes/requirements.txt

Or ComfyUI Manager, search ComfyUI_MieNodes. No model weights in the pack; the drafting runs on whatever llm_service_connector you supply - a local Ollama vision model with no API key, or a hosted endpoint with a key in mie_llm_keys.json.

Things that go wrong

auto-draft needs a picture to write the description - it can't describe what it can't see. Wire an image, pick one in the media card, or type the description yourself.

the Auto node requires an LLM connector with invoke() - you wired something that isn't a full connector node (a bare string, or a connector from another pack). Use one of the pack's Set*LLMServiceConnector nodes.

Generic voice lines are the expected output of a deaf model: use voice_prompt. And since this is an output node, nothing saves until the graph runs - hit the save button, then check status.

Categoryhidden

Inputs (12)

NameTypeDefaultDescription
library_dirSTRING—
nameCOMBO(下拉选择资产)资产名:📋 已有资产 Existing 模式下拉选名字 = 覆盖该资产;✏️ 新建 New 模式输入名字 = 新建(两者互斥二选一)。 Asset name: 📋 Existing mode picks an asset to overwrite; ✏️ New mode types a name to create — the two are mutually exclusive.
descriptionSTRING资产的英文描述(60–100 词)。角色 = 外观事实(年龄/发型/脸型/着装),场景 = 空间/陈设/光线/氛围。 English description (60-100 words). Character = looks only; scene = space, furniture, lighting, atmosphere.
voiceSTRING角色音色的英文一行描述(年龄/性别/音域/语速/质感,≤200 字符);场景类型忽略本字段。 One-line English timbre descriptor for characters (age/gender/register/pace/texture, <=200 chars); ignored for scenes.
new_nameSTRING—
llm_service_connectorLLMServiceConnector起草空白 description/voice 的 LLM 连接器。LLM connector that drafts the empty fields.
imageoptIMAGE—
audiooptAUDIO—
image_uploadoptSTRING—
audio_uploadoptSTRING—
image_promptoptSTRING给描述 LLM 的作者先验(可选):角色 = 气质/着装/必须写进的事实;场景 = 地点/时段/氛围/陈设事实;任意语言。空 = 纯看图起草。 Author prior for the description call (optional): character mood/wardrobe facts or scene place/time/furnishing facts — any language. Empty = draft from the picture alone.
voice_promptoptSTRING给音色 LLM 的作者先验(可选,仅角色类型):它听不到音频,真实音色只能在这里告诉它,如「老年男声,沙哑,语速慢」。空 = 从名字+外观推断;场景类型忽略本字段。 Author prior for the voice call (optional, characters only): the LLM cannot hear the sample — ground-truth timbre goes ONLY here, e.g. 'elderly male, hoarse, slow pace'. Empty = inferred from name+looks; ignored for scenes.

Outputs (6)

NameTypeDescription
nameSTRING—
descriptionSTRING—
voiceSTRING—
imageIMAGE—
statusSTRING—
assetMIE_ASSET—