ComfyUI Node

Generation Core

The all-in-one sampler that records the seed and canvas it actually used

By sickollie·Created 2 months ago·Updated 7 days ago· 19
Generation Core
  • model
  • positive_conditioning
  • negative_conditioning
  • samples
  • vae
  • seed_used
  • width
  • height
  • generation_info
positive_text
clip_name
clip_typekrea2
clip_devicedefault
vae_name
resolution_modecustom
custom_width1440
custom_height1920
aspect_preset3:4 (Portrait Standard)
megapixels1.00
batch_size1
steps9
cfg1.0
sampler_nameeuler
schedulerbeta
denoise1.00
shift1.25
seed_value-1
seed_input-1

A stock ComfyUI sampling chain is four or five nodes - empty latent, KSampler, VAE, a text encoder - and none of them tell you what actually ran after the fact. SickOllie's Generation Core (Classic family, SOGenerationPipeline) collapses that whole chain into one node with a specific philosophy: it loads its own CLIP and VAE, samples, and then hands back the resolved seed, width, and height as outputs, not just the pixels. For a LoRA testing campaign, that "what really happened" record is half the point. The pack is built around Krea2-oriented defaults, though the dropdowns fall back to whatever text encoder and VAE you have installed.

How it works

One model socket in, one run_pipeline call, several things done. A seed of -1 means randomize independently each run; otherwise it clamps to the legal range. Dimensions resolve from either custom width/height or an aspect preset plus megapixels. Then it loads the CLIP internally (clip_type covers krea2, sd3, stable_diffusion, stable_cascade, pixart, flux, and default), encodes your positive_text, and uses an empty-string negative unless you supply one. The shift control applies the AuraFlow-style shift to the model before sampling - that's the parameter a lot of newer architectures care about - and a live preview callback streams samples while it runs.

The two optional CONDITIONING sockets are the escape hatch: connect positive_conditioning or negative_conditioning and they override the internal text encoding, which is what you want for image-edit or reference-image encoders that attach their own conditioning. Leave them unconnected and behavior is unchanged.

Inputs and outputs that matter

The controls you'll actually touch: model, positive_text, clip_name/clip_type/clip_device and vae_name (your encoder and VAE), resolution_mode (custom vs preset), aspect_preset + megapixels, steps, cfg, sampler_name, scheduler, denoise, shift, and seed_value. Defaults skew Krea2: 9 steps, CFG 1, euler + beta scheduler, 1.0 megapixel.

Outputs, in order: samples (LATENT) and vae go to your decoder or straight to Classic Output Core; seed_used, width, and height are the resolved values this run actually used; generation_info is a string summary for Output Core to embed. Those last four are the node's whole selling point - you never have to guess the seed.

Installing it

Part of the SickOllie pack:

cd ComfyUI/custom_nodes
git clone https://github.com/sickollie/SickOllie

or ComfyUI Manager → "SickOllie". Python 3.10+, restart, Ctrl+F5. No pip installs; the pack's dependencies are already in a normal ComfyUI environment.

Where people get burned

Seed confusion, mostly. The node's seed behavior is deliberately persistent - -1 randomizes each run, any other value stays fixed - which is saner than stock KSampler's control-after-generate dance. But if you set a fixed seed and keep getting identical images, that's not a bug: you asked for it. The other gotcha is expecting this to work with a model that wants a specific CLIP type - pick the wrong clip_type for your architecture and encoding fails; when in doubt, default matches the model's own config. And if you're feeding a reference-image workflow, remember the CONDITIONING override sockets are there precisely so you don't have to bolt on a second text encoder.

CategorySick Ollie/Classic

Inputs (22)

NameTypeDefaultDescription
modelMODEL
positive_textSTRING
clip_nameCOMBO0 options:
clip_typeCOMBOkrea27 options: krea2, sd3, stable_diffusion, stable_cascade, pixart, flux, +1
clip_deviceCOMBOdefault3 options: default, cpu, gpu
vae_nameCOMBO0 options:
resolution_modeCOMBOcustom2 options: custom, preset
custom_widthINT144016–16384
custom_heightINT192016–16384
aspect_presetCOMBO3:4 (Portrait Standard)8 options: 1:1 (Square), 2:3 (Portrait), 3:4 (Portrait Standard), 4:5 (Portrait Tall), 9:16 (Portrait Phone), 4:3 (Landscape Standard), +2
megapixelsFLOAT1.000.05–64
batch_sizeINT11–64
stepsINT91–10000
cfgFLOAT1.00–100
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBObeta9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1
shiftFLOAT1.25-100–100
seed_valueINT-1-1–1125899906842624-1 means randomize independently for each run.
seed_inputoptINT-1Optional external seed override. When connected, this value replaces the Generation Core seed widget for the current run.
positive_conditioningoptCONDITIONINGOptional external positive conditioning. When connected, it overrides Generation Core's internal positive-text encoding. Useful for image-edit encoders that attach reference-image conditioning.
negative_conditioningoptCONDITIONINGOptional external negative conditioning. When unconnected, Generation Core keeps its existing empty-negative behavior.

Outputs (6)

NameTypeDescription
samplesLATENT
vaeVAE
seed_usedINT
widthINT
heightINT
generation_infoSTRING