Nodes/comfyui-profiles/Workflow profiles
ComfyUI Node

Workflow profiles

The Node That Does Nothing, On Purpose

By jdelahayes·Created 5 days ago·Updated about 17 hours ago· 0
Workflow profiles
      ◄profiles►
      ◄source►

      Most nodes you drag onto the canvas are trying to compute something. This one isn't. Workflow profiles has no linkable inputs, no outputs, and its entire function is a Python method called noop that returns an empty tuple. Drop it in your graph and nothing changes: same pixels, same speed, same result.

      It's also the single most useful thing you can put in a workflow you plan to give away.

      Why you'd want an inert node

      Every workflow share dies the same death. You post a graph, someone loads it, and ComfyUI lights up red: missing custom nodes, missing checkpoints, missing VAE, missing LoRAs that only exist on someone's CivitAI page. Setup and maintenance overhead is the number one operational complaint in r/comfyui, and "why does no workflow I download work?" is a recurring genre. Sharing culture is real; the friction was never solved. ComfyUI Manager closed half the gap by installing missing node packs. It never handled the other half: which model files, in which precision, from which source, alongside which pip packages.

      That's the gap comfyui-profiles targets, and Workflow profiles is its calling card inside the graph. The node declares, in the workflow itself, the usage profiles it needs - each one an entry in a profiles.json listing the models, custom nodes, workflows and pip packages a use case requires. Ship the graph, ship the declaration, and the recipient knows what to install instead of guessing at red boxes.

      How it actually works

      A profile name only means something inside a specific profiles.json, so the node carries two strings.

      profiles is the one you must fill: comma-separated profile names, e.g. krea2-turbo, essential-nodes. Variants live in brackets, from the author's own tooltip: krea2-turbo[int8], or krea2-raw[int8,bf16] for two at once. Leave the brackets off and you get the profile's default variant, which is usually what you want.

      source is optional: a URL to the profiles file that defines those names, e.g. a raw GitHub link to your own profiles.json. Without it, the declaration only helps people who already have your profiles. With it, a stranger can pull the definitions.

      None of this is wired. RETURN_TYPES is empty and is_output_node is false, so ComfyUI never puts the node in a submitted prompt and never runs it when you hit Queue. It's a sticky note the pack reads out of the workflow JSON.

      Which gives you the one gotcha, and it's the good kind: in a ComfyUI without comfyui-profiles, this node shows up as a missing node. Not a bug. A red box where the declaration should be tells the recipient exactly what to install.

      Then two things happen on the receiving end. Opening a workflow that contains this node fires a notification listing the declared profiles that aren't installed or aren't in your file, and the Profiles tab grows a This workflow section: each profile's state, buttons to install one or all, and - for a profile your file lacks - a + that adds it from the node's source, plus whatever it inherits, without wiping what you already have.

      The second thing is quieter and honestly the better feature: Check the workflow's models… lists every model field in the graph, marks each provided, present-but-outside-the-profiles, or not found, and offers files from your profiles that can stand in - same file in another folder, same model at another precision, a nearby version. You can flip a whole workflow from int8 to bf16 and have the loader fields follow, instead of downloading a model you already own under a different name.

      Installing the pack

      The node ships in the pack; there's nothing separate to grab. ComfyUI Manager, search comfyui-profiles, or by hand:

      cd ComfyUI/custom_nodes
      git clone https://github.com/jdelahayes/comfyui-profiles.git
      

      Restart ComfyUI. The Profiles tab appears in the sidebar and the node lands in the utils category.

      Dependency load is minimal: huggingface_hub in pyproject.toml, which ComfyUI already has, and no requirements.txt or install.py to run. No models ship with it. What it will do, once you install a profile, is download that profile's models into the folders ComfyUI actually scans (including extra_model_paths.yaml), and pip only the packages a profile names.

      When it misbehaves

      The notification won't go away. Profile names must match your profiles.json exactly. If you're on the shipped example template and the workflow declares someone else's profile, fill in source or import their file - a name means nothing across two different files.

      It says a profile is missing from your file even though you have one by that name. You're editing a different file than you think. The pack picks the first match among --config, COMFY_PROFILES_CONFIG, ComfyUI/user/__comfy_profiles/profiles.json, then the read-only template. comfy_profiles.py where tells you which is live.

      A freshly installed model doesn't show in a loader's dropdown. Press R in ComfyUI to refresh the lists. The file is on disk; the widget is stale.

      Last thing: a workflow carrying this node still doesn't install itself - someone has to click. But "figure out what this graph needs" becomes "click one button," and that's the difference between a workflow getting used and getting ignored.

      Categoryutils

      Inputs (2)

      NameTypeDefaultDescription
      profilesSTRINGProfile names, comma-separated (e.g. krea2-turbo, essential-nodes). Variants between brackets: krea2-turbo[int8], krea2-raw[int8,bf16]; without brackets, the profile's default variant.
      sourceoptSTRINGURL of the profiles file that defines them (e.g. a raw GitHub link), for users who don't have these profiles.

      Outputs (0)

      No outputs