Extensions/Orel's Nodes
ComfyUI Extension

Orel's Nodes

Custom ComfyUI nodes by Orel for downloading Hugging Face models, managing HF tokens, and uploading LoRAs.

By DarkOrel·Created 21 days ago·Updated 13 days ago· 1
DarkOrel/Orels-Nodes
Nodes20
On cloudLocal install
CategoryOrel's Nodes/Primitive, Orel's Nodes/Setup
Stars1
Updated13 days ago

Nodes (20)

Any to Float

The percent-stripping converter nobody expects

Orel's Nodes/Primitive
Any to Int

Any to Int refuses to guess — and that's the feature

Orel's Nodes/Primitive
Any to String

The node you add when a socket turns red

Orel's Nodes/Primitive
Dependency Checker

Find out what's missing before the error wall

Orel's Nodes/Setup
Download All

One button that fires every model node you've wired to it

Orel's Nodes/Models
Environment Setup

One node that provisions a whole FLUX.2 Klein rig

Orel's Nodes/Setup
Face QC

One comparison, two verdicts, zero AI involved

Orel's Nodes/Face
Filename Builder

Stop naming 400 outputs ComfyUI_00042

Orel's Nodes/File
Format Text

Prompts and reports from a template, without eval()

Orel's Nodes/Text
Hugging Face Token

The node with no wires, and that's deliberate

Orel's Nodes/Models
LoRA Loader + Name

The loader that tells you which file it used

Orel's Nodes/LoRA
LoRA Upload

Dragging a .safetensors past the 413 wall

Orel's Nodes/Models
Model Download

A download button that lives inside the graph

Orel's Nodes/Models
Model File Checker

Did your 6GB download actually finish?

Orel's Nodes/File
Multi Reference Face Similarity

A QC metric, not a lie detector

Orel's Nodes/Face
Pass / Fail Route

Routing yes, saving you GPU time, no

Orel's Nodes/Face
Prompt Template

Swap {TRIGGER} without retyping your prompt

Orel's Nodes/Text
Telegram Config Writer

Set up the bot from inside the graph

Orel's Nodes/Setup
Trigger Word

Trigger Word is a label, not a feature — and that's fine

Orel's Nodes/Text
Workflow Status

The run log you never bothered to write

Orel's Nodes/Debug
Readme

Orel's Nodes

Utility, workflow, LoRA, setup, and quality-control nodes for ComfyUI.

A small toolkit that reduces the need for extra custom-node packs for trivial string, filename, and setup operations. Heavy features such as InsightFace face analysis and Hugging Face downloads stay optional.

Version: 0.6.1
License: see LICENSE
Package ID: orels-nodes
Publisher: darkorel

Features

  • Models — Hugging Face model download, Download All, shared HF token UI, chunked LoRA upload
  • Primitive converters — Any → String / Int / Float (IO.ANY)
  • Text utilities — Format Text, Trigger Word, Prompt Template
  • LoRA tools — LoRA Loader + Name (native apply + filename/basename outputs)
  • File / workflow tools — Filename Builder, Model File Checker, Workflow Status
  • Setup / dependency tools — Environment Setup, Telegram Config Writer, Dependency Checker
  • Face / QC tools — Multi Reference Face Similarity, Face QC, Pass / Fail Route

Installation

ComfyUI Manager / Registry

  1. Open ComfyUI Manager (or the built-in Extensions / Registry UI).
  2. Search for Orel's Nodes (orels-nodes).
  3. Install and restart ComfyUI.
  4. Hard-refresh the browser.

On first install, also install download dependencies if you use model download / LoRA upload:

python -m pip install -r custom_nodes/orels-nodes/requirements.txt

(Use the Python environment that runs ComfyUI.)

Manual Git install

cd ComfyUI/custom_nodes
git clone https://github.com/DarkOrel/Orels-Nodes.git orels-nodes
python -m pip install -r orels-nodes/requirements.txt

Restart ComfyUI and hard-refresh the browser.

Updating

  • Manager / Registry: use Update on Orel's Nodes, then restart and hard-refresh.
  • Git: git pull inside custom_nodes/orels-nodes, reinstall requirements if they changed, restart, hard-refresh.

Nodes

Internal IDs (workflow JSON type) are stable. Display names are shown in the UI.

Orel's Nodes/Primitive

| Display name | ID | Summary | |---|---|---| | Any to String | OrelsAnyToString | Convert any connected value to STRING | | Any to Int | OrelsAnyToInt | Convert compatible values to INT with clear errors | | Any to Float | OrelsAnyToFloat | Convert compatible values to FLOAT with clear errors |

Orel's Nodes/Text

| Display name | ID | Summary | |---|---|---| | Format Text | OrelsFormatText | Multiline template with {a}…{f} (no eval(), no brace escaping) | | Trigger Word | OrelsTriggerWord | Pass-through STRING labeled as a LoRA trigger word | | Prompt Template | OrelsPromptTemplate | Replace {TRIGGER} (or a custom placeholder) in a prompt |

Orel's Nodes/LoRA

| Display name | ID | Summary | |---|---|---| | LoRA Loader + Name | OrelsLoraLoaderName | Load a LoRA like core ComfyUI; also output filename and basename |

Orel's Nodes/File

| Display name | ID | Summary | |---|---|---| | Filename Builder | OrelsFilenameBuilder | Build a safe cross-platform filename stem | | Model File Checker | OrelsModelFileChecker | Check whether a model file exists in ComfyUI folders |

Orel's Nodes/Debug

| Display name | ID | Summary | |---|---|---| | Workflow Status | OrelsWorkflowStatus | Readable multi-line workflow metadata summary |

Orel's Nodes/Setup

| Display name | ID | Summary | |---|---|---| | Environment Setup | OrelsEnvironmentSetup | Verify or download the known FLUX.2 Klein model set | | Telegram Config Writer | OrelsTelegramConfigWriter | Merge Telegram Suite bot/chat config without exposing tokens | | Dependency Checker | OrelsDependencyChecker | Report READY / MISSING — does not install packages |

Orel's Nodes/Face

| Display name | ID | Summary | |---|---|---| | Multi Reference Face Similarity | OrelsMultiReferenceFaceSimilarity | InsightFace cosine similarity vs up to 3 references (QC metric) | | Face QC | OrelsFaceQC | Pass/fail gate from score and threshold | | Pass / Fail Route | OrelsPassFailRoute | Copy image to PASS or FAIL outputs (not true lazy execution) |

Orel's Nodes/Models

| Display name | ID | Summary | |---|---|---| | Model Download | OrelsModelDownload | Download one Hugging Face file into a ComfyUI model folder | | Download All | OrelsDownloadAll | Start every connected model download | | Hugging Face Token | OrelsHFToken | Configure the shared server Hugging Face token | | LoRA Upload | OrelsLoraUpload | Upload .safetensors LoRAs into ComfyUI |

Optional dependencies

| Feature | Install | |---|---| | Model download / LoRA upload | requirements.txt (huggingface_hub, filelock) | | Multi Reference Face Similarity | requirements-face.txt (insightface, onnxruntime, OpenCV, NumPy) | | Telegram Config Writer | ComfyUI Telegram Suite custom node pack installed separately |

Core utility nodes (primitives, text, filename, status, Face QC gate, etc.) still load when optional packages are missing. Only the dependent feature fails when you run it, with a clear error.

Environment Setup

Checks (and optionally downloads) the known FLUX.2 Klein models used by this toolkit:

| Model | Category | |---|---| | FLUX.2 Klein Base 9B FP8 | diffusion_models | | Qwen text encoder | text_encoders | | FLUX.2 VAE | vae |

Token precedence: HF_TOKEN → HUGGINGFACE_TOKEN → Hugging Face Token node (server store).
There is no workflow-serialized token field — ComfyUI would save STRING widgets into workflow JSON. Use env vars or the Hugging Face Token node instead.
Tokens are never written into workflows or status outputs.

Telegram Config Writer

Merges a bot name/token and chat name/id into ComfyUI Telegram Suite’s config.json (typically {cwd}/user/default/telegram-suite/config.json). Unrelated bots/chats are preserved. The bot token is never returned in node outputs. Restart ComfyUI if Telegram Suite already cached an older config.

Face Similarity

Multi Reference Face Similarity is a workflow quality-control metric, not proof of real-world identity. It uses the largest detected face per image, optional InsightFace models, and a user-configurable threshold. Install requirements-face.txt before use.

Pass / Fail Route

Copies the input image to PASS_IMAGE or FAIL_IMAGE based on score >= threshold.
This is not true lazy / conditional execution. Nodes wired to the unused output can still run. For real branch-skipping, drive a ComfyUI or KJNodes lazy switch from the passed boolean.

Security

  • Never commit tokens, bot secrets, or private chat IDs
  • Prefer environment variables for HF tokens on shared hosts
  • Model paths and filenames reject .. / absolute escapes
  • Upload/download destinations stay inside ComfyUI model folders

Registry / Manager notes

  • Package id: orels-nodes (immutable)
  • Display name: Orel's Nodes
  • Publisher id: darkorel
  • Icon: assets/icon.png
  • node_list.json lists every public backend node for Manager discovery

Development / testing

See TESTING.md and CHANGELOG.md.

python -m unittest discover -s tests -p 'test_*.py' -v
node tests/test_ui.mjs

License

See LICENSE.