Nodes/Universal Input Hub by Steve Lasmin/Universal Input Hub by Steve Lasmin
ComfyUI Node

Universal Input Hub by Steve Lasmin

Universal Input Hub by Steve Lasmin

By Eklipsis·Created 4 months ago·Updated 3 months ago· 0
Universal Input Hub by Steve Lasmin
  • model
  • clip
  • width
  • height
  • preview
  • seed
  • noise
  • steps
  • cfg
  • sampler_name
  • sampler
  • scheduler_name
  • sigmas
  • flux_sigmas
  • model
  • prompt
  • prompt_with_triggers
  • negative_prompt
  • trigger_words
  • positive
  • negative
  • help
max_size1024
aspect_ratiocustom
width_ratio2
height_ratio3
multiplier32
seed777
steps20
cfg4.0
samplereuler
schedulernormal
prompt
trigger_words
negative_prompt

The whole sampler rig, collapsed into one box

You know the drill: every generation starts with the same ten-node chain - Empty Latent Image, CLIP Text Encode twice, a seed, a steps widget, a CFG widget, a sampler/scheduler picker, a noise source. It's fiddly, it sprawls, and when a shared workflow uses slightly different widget names, your graph turns into a nest of reroutes. Universal Input Hub is a bet that you can collapse most of that into a single node: it takes a model, a CLIP encoder, and a prompt, and hands back the noise, the sigmas, the sampler object, and both conditioning tensors.

The "hub" idea isn't new - rgthree's Context nodes already bundle a dozen connections down one wire. This is the single-node version of that impulse: everything a sampler wants in one place, with tooltips on every input. Whether it beats rgthree for you comes down to taste. It is not a latent generator, which is the first thing to know before you wire anything up.

How it works

The mechanism is honestly pretty clean. You give it a max_size (the longest side) and an aspect ratio - either a preset like 16:9 or a custom width_ratio/height_ratio. It solves for the other dimension, rounds both to your multiplier (64 for SD 1.5, 32 for SDXL, 16 for Flux - the tooltip says so), and hands back width and height as INTs.

From there it builds everything else: a NOISE object from your seed, a SAMPLER object from your sampler picker, standard sigmas computed from the model, scheduler, and steps, and the positive/negative CONDITIONING from your prompt and negative_prompt. The interesting output is flux_sigmas: a dimension-aware schedule computed purely from the output size and step count, using the same time-SNR shift math and empirical constants ComfyUI's own Flux-2 sampler uses. No Flux model loaded? Doesn't matter - that path never touches the model.

The inputs that matter

You'll actually set six of them: max_size, aspect_ratio, seed, steps, cfg, and the two prompts. cfg's tooltip is worth trusting: Flux likes 1.0–4.0, SDXL wants 7.0–8.0. trigger_words is a small nicety - text that gets auto-prepended to your prompt with a ". " separator, handy for sticking a LoRA's trigger in without retyping it. sampler and scheduler are just the standard ComfyUI lists, so no new vocabulary to learn. The preview output is a human-readable summary string of every setting - genuinely handy when you've buried a workflow and need to know what it ran.

What wires where

For a normal KSampler you still need an Empty Latent Image node - the hub gives you width/height to feed it, but not a latent. The README glosses over that; don't let it trip you up. Wire positive and negative into the sampler, model through, and the seed/steps/cfg/sampler_name/scheduler_name outputs straight into the matching widgets. For SamplerCustomAdvanced, grab noise, sigmas, and sampler instead. And if you want to see everything the node computed, the help output is a full in-node manual.

Installing it

ComfyUI Manager → search "Universal Input Hub", or clone it directly:

cd ComfyUI/custom_nodes
git clone https://github.com/Eklipsis/universal_input_hub_by_steve_lasmin.git

Then restart ComfyUI. It shows up under utils. One real plus: pyproject.toml declares zero Python dependencies - no torch pinning, no pip-install dance, nothing to break your environment. It's also a pure backend node with no JavaScript, so it sidesteps the Nodes 2.0 frontend rewrite problems that took down JS-heavy packs.

The honest gotchas

  • flux_sigmas are timesteps for Flux-2-style models. Feed them to an SD/SDXL sampler and you'll get garbage. Use the plain sigmas output for normal models.
  • The node is marked OUTPUT_NODE, so it always executes on every run, even if nothing downstream consumes it. Not a bug - just know it's there.
  • It's tiny and new, with effectively zero community footprint - search as I might, nobody's talking about it. The author is a Boosty (Russian-patreon-style) creator, and the license is CC BY-ND: you can use and share it, but no derivatives without permission. If you hit a wall, expect to debug it yourself.
Categoryutils

Inputs (15)

NameTypeDefaultDescription
max_sizeINT102432–4096Maximum dimension in pixels. The longest side of the image will match this value.
aspect_ratioCOMBOcustomSelect a preset aspect ratio, or choose 'custom' to define your own via width_ratio and height_ratio.
width_ratioINT21–999999Custom width component of the aspect ratio. Only used when aspect_ratio is set to 'custom'.
height_ratioINT31–999999Custom height component of the aspect ratio. Only used when aspect_ratio is set to 'custom'.
multiplierCOMBO32Round width and height to be divisible by this value. Use 64 for SD 1.5, 32 for SDXL, 16 for Flux.
seedINT7770–18446744073709550000Random seed for noise generation. Use 'control after generate' to randomize, increment, or keep fixed.
stepsINT201–10000Number of sampling steps. Higher values = more detail but slower generation.
cfgFLOAT4.00–100Classifier-Free Guidance scale. Higher = stronger prompt adherence. Flux works well at 1.0-4.0, SDXL at 7.0-8.0.
samplerCOMBOeulerSampling algorithm. 'euler' is fast and reliable. 'dpmpp_2m' is higher quality.
schedulerCOMBOnormalNoise schedule. 'normal' is standard. 'simple' works well with Flux. 'karras' for SDXL.
modelMODELThe diffusion model. Required for standard sigmas calculation and model passthrough.
clipCLIPThe CLIP text encoder. Required to convert text prompts into conditioning tensors.
promptSTRINGMain positive prompt describing what you want to generate.
trigger_wordsSTRINGTrigger words prepended to the prompt with '. ' separator. Leave empty to use prompt only.
negative_promptSTRINGNegative prompt describing what you want to exclude from the image.

Outputs (20)

NameTypeDescription
widthINT
heightINT
previewSTRING
seedINT
noiseNOISE
stepsINT
cfgFLOAT
sampler_nameSTRING
samplerSAMPLER
scheduler_nameSTRING
sigmasSIGMAS
flux_sigmasSIGMAS
modelMODEL
promptSTRING
prompt_with_triggersSTRING
negative_promptSTRING
trigger_wordsSTRING
positiveCONDITIONING
negativeCONDITIONING
helpSTRING