Minimal Node
The custom node that does nothing (and why it exists)
- any_input
- *
Minimal Node takes whatever you plug into it and hands it back to you unchanged. That's the whole trick, and the whole point - this isn't a tool you'll reach for to make better images. It's the "Hello World" of ComfyUI custom nodes, and its job is to exist so someone can prove the publishing pipeline works, not to render a single pixel for you.
The pack's own README says it plainly: "a custom node for publisher testing." Dig into pyproject.toml and you'll see the real purpose spelled out - "Sample Node for testing the publish-node-action." That's the GitHub Action Comfy Org uses to push a custom node from a repo to the Comfy Registry. This pack is the smoke test for that pipeline: a repo that has to actually build, install, and register correctly so that the author (or a beginner testing the process) can see whether the plumbing from GitHub to registry.comfy.org is intact. Find it showing up in a shared workflow's missing-node list and you've essentially found a test artifact, not a missing feature.
What it actually does
Read the source and it's about as minimal as a ComfyUI node can get - 25-ish lines in nodes.py, no dependencies, no models, nothing downloaded. It declares one required input, any_input with type *, returns one output of type *, and its do_nothing function literally returns the input untouched:
def do_nothing(self, any_input):
return (any_input,)
The * is ComfyUI's wildcard type (the docs call it ANY). A node declaring * will accept a model, an image, a latent, a string, anything - and it's on the node to make sense of whatever arrives. This one doesn't bother; it just passes it through. So the input/output story is a single line: feed it anything, get the same thing back, no transformations.
That's also the one genuinely useful thing to learn here if you're new: this is the smallest valid custom node in existence, a clean skeleton you can copy when you want to write your first one. The anatomy you'll see in every 2023-era pack is all present - INPUT_TYPES, RETURN_TYPES, FUNCTION, CATEGORY, and the two registration dictionaries NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS that tell the server "this class exists, and it displays as 'Minimal Node'." Newer packs use a different authoring API and often skip those dictionaries entirely (that's a newer style, not a broken one), but this node is the classic pattern in its purest form.
Installing it
The normal way, in case you actually need it:
cd ComfyUI/custom_nodes
git clone https://github.com/eliteprox/test-custom-node
Then restart ComfyUI, and it'll show up under the "Example" category. There are no heavy dependencies to worry about - requirements.txt and install.py are both empty, so you're not pulling in PyAV or a custom fork of anything. You can also grab it through ComfyUI Manager if you prefer clicking buttons.
The honest troubleshooting section
There aren't real failure modes here, because there's nothing to fail at. If the node errors, it's because whatever you wired into it can't travel a * socket cleanly - but in practice it accepts nearly anything. The bigger gotcha is expectation management: people who find this in a downloaded workflow assume it's doing something important. It isn't. Wire it up if you must to satisfy the graph, or just delete it and route around it, because it adds nothing but a detour.
Worth saying once, since it's the rare pack where you can check in thirty seconds: every custom node you install runs arbitrary Python with your user's permissions when it loads, and there's no automated scan that catches everything. A pack this small is trivially reviewable - the whole implementation is one short file. Use it as the reminder that "look at what you're about to run" is always a cheap habit, and an unusually easy one here.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| any_input | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| * | * | — |