From comfyui-node-dev
Use when asking about hidden inputs (UNIQUE_ID, PROMPT, EXTRA_PNGINFO, DYNPROMPT), flexible inputs, wildcards, dynamic input handling, accessing current prompt data inside a node, passing metadata between nodes, or accepting any input type. Triggers on "get prompt info", "access workflow data", "wildcard input", "any type input", "노드에서 프롬프트 접근", "숨은 입력".
How this skill is triggered — by the user, by Claude, or both
Slash command
/comfyui-node-dev:comfyui-hidden-inputsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Hidden inputs are not shown in UI but automatically provided by ComfyUI.
Hidden inputs are not shown in UI but automatically provided by ComfyUI.
| Name | Type | Purpose |
|---|---|---|
UNIQUE_ID | str | Node's unique ID |
PROMPT | dict | Full prompt data |
EXTRA_PNGINFO | dict | PNG metadata storage |
DYNPROMPT | object | Dynamic prompt access |
class NodeWithHiddenInputs(io.ComfyNode):
@classmethod
def define_schema(cls):
return io.Schema(
node_id="NodeWithHiddenInputs",
category="utils",
inputs=[
io.Image.Input("image"),
io.Hidden.unique_id(),
io.Hidden.prompt(),
io.Hidden.extra_pnginfo(),
io.Hidden.dynprompt(),
],
outputs=[io.Image.Output()],
)
@classmethod
def execute(cls, image, unique_id=None, prompt=None,
extra_pnginfo=None, dynprompt=None) -> io.NodeOutput:
print(f"Node ID: {unique_id}")
if extra_pnginfo is not None:
extra_pnginfo["custom_data"] = {"key": "value"}
return io.NodeOutput(image)
class StatefulNode(io.ComfyNode):
_states = {}
@classmethod
def execute(cls, image, unique_id=None) -> io.NodeOutput:
if unique_id not in cls._states:
cls._states[unique_id] = {"call_count": 0}
cls._states[unique_id]["call_count"] += 1
return io.NodeOutput(image)
@classmethod
def execute(cls, image, metadata_key, metadata_value,
extra_pnginfo=None) -> io.NodeOutput:
if extra_pnginfo is not None:
extra_pnginfo["custom_metadata"] = {metadata_key: metadata_value}
return io.NodeOutput(image)
class AnyTypePassthrough(io.ComfyNode):
@classmethod
def define_schema(cls):
any_type = io.MatchType.Template("any")
return io.Schema(
node_id="AnyTypePassthrough",
category="utils",
inputs=[io.MatchType.Input("value", template=any_type)],
outputs=[io.MatchType.Output(template=any_type)],
)
@classmethod
def execute(cls, value) -> io.NodeOutput:
return io.NodeOutput(value)
io.Int.Input(
"value",
default=0,
forceInput=True, # Connection only, no widget
)
# CORRECT
def execute(cls, image, unique_id=None, prompt=None):
...
# WRONG
def execute(cls, image, unique_id, prompt):
...
@classmethod
def execute(cls, image, prompt=None, extra_pnginfo=None) -> io.NodeOutput:
if prompt is not None:
node_count = len(prompt)
if extra_pnginfo is not None:
extra_pnginfo["key"] = "value" # OK to modify
return io.NodeOutput(image)
# READ only
if prompt:
node_count = len(prompt)
# DON'T modify
# prompt["new_node"] = {...} # WRONG!
npx claudepluginhub juyeongyi/jylee_claude_marketplace --plugin comfyui-node-devCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.