This part four of a series of articles I will write on this subject. This one is about Samplers
You can find part one here:
workflows-a-beginners-tutorial-and-hands-on-walkthrough-part-1
You can find part two here:
workflows-a-beginners-tutorial-and-hands-on-walkthrough-part-2
You can find part three here:
workflows-a-beginners-tutorial-and-hands-on-walkthrough-part-3
You can find part five here:
workflows-a-beginners-tutorial-and-hands-on-walkthrough-part-5
Introduction:
I love building stuff. I'm an engineer and a carpenter and now build waterparks for a living. How things work and creating is my passion. I create workflows that get used by a lot of people and I get asked a lot of questions, especially about ComfyUi in general and how to build with them, so I thought I'd take the time to put together a few articles over the next few (weeks, month, however long) to help those understand the basics, the move on to more advanced workflows.
This part is all about Samplers
Introduction to Ksamplers
Different types of samplers
regular
advanced
chain samplers
ClownShark Samplers
Tutorial workflow overview
Example 1:
introduction to new nodes and techniques
(note: some of this was explained in part 1)
Sampler configurations
examples of different samplers in action
Advanced Samplers
Clownshark setups
Detailer Daemons
Plus some cool 💡 tips & tricks along the way
Introduction to Samplers:
🛑⚠️💡 If you have not already read my article a-ksampler-by-any-other-name, I suggest you do so now. The information is crucial for you to understand may aspects of what I am about to discuss.
Different types of sampler nodes:
There are numerous different types of these. Realistically, most are from people that want their name on it and aren't really all that different, and for all intents and purposes you can accomplish the same thing with the basic ones I list below
From left to right:

KSampler (Basic / Standard)
The default and most beginner-friendly sampler. Adds noise to your latent image and then fully denoises it in one step.
Key controls:
Steps
CFG Scale
Sampler Name
Scheduler
Denoise strength
KSampler (Advanced)
More powerful and flexible version of the basic KSampler.
Enable or disable denoise entering and exiting the sampler (mainly for chain sampling or refinements)
start at step/ end at step: Also mainly used for chain sampling
SamplerCustomAdvanced
The most customizable sampler
Allows you to control every aspect of generation with custom nodes
Found mostly in Flux and Z-Image (ZIT) workflows
ClownsharkKSampler (RES4LYF) 🤡🦈🦇
An incredibly powerful advanced sampler (and group of nodes) created by ClownsharkBatwing.
Features many extra options including numerous sampler types, noise types, and guidance methods that plug into nbot only their sampler, but others as well
Designed for high-quality or specialized results (works especially well with certain modern models).
KSampler (pipe)
A pipe version of the KSampler (usually from Impact Pack).
Uses a basic pipe input instead of connecting model, positive, and negative prompts separately.
Keeps all data in one place so no need for multiple spaghetti strands.
Great for modular workflows, face detailers & upscalers
💡Using a pipe really shines when using detailers. Half of the processing time between detailers is assembling data. The Impact pack as a "detailer pipe" that keep some of the basic encodeing intact between detailers. If you find yourself spending a lot of time detailing and refining images at the end, give it a try.
Tutorial Workflow Overview:

In this section I am going to introduce you to some basic (yet essential) nodes to make your life easier as yor workflow grows.
Start by opening the "Part 4 example 1.json" Workflow.
For this exercise, we will be using Z-image turbo.
💡I suggest sticking to this model instead of substituting. It will make it easier to understand my adjustments, which are different from model to model.
Let's start by generating our little friend here for reference.

Let's do a quick walkthrough of the workflow:

Notice how there is no negative prompt? This is because ZIT (as well as Flux and other models) uses a CFG (Classifier Free Guidance) of 1.0.
In simple terms, think of the conditioning as a path the model takes, there is a fork in the road.
If the CFG is one, the road stays straight and does not change
The higher the CFG, the further apart the roads spread out and the more the positive drifts away from the negative.
Flux and ZIT do not use this type of conditioning, so the negative becomes useless.
Note: There is a node and math called "NAG" that helps to add a negative. You'll see this used quite often in WAN video workflows. It can be used other places as well, but your mileage will vary.
Now I want you to delete the negative prompt text encoder and hook up the "ConditioningZeroOut" node (I moved things over so you could see the spaghetti)

💡I want you to pay attention to how fast this pushes the process through the text encoders vs. the older way 🤔
If you hit run, you should get our same little friend again.

Now I want you to hook up the "ModelSamplingAuraFlow" node.

Set to 4, move over to the image and pay attenton to the change. Then set it for 8 and do it again.
⚠️note: leave at 4.0 for the remainder of this exercise after you complete this.
Grok had this to say what it does and why it works:
"It patches/adjusts the model's sampling behavior by applying a specialized configuration optimized for AuraFlow's architecture. It modifies the timestep shift (noise schedule), which controls how the model spends its denoising steps:Higher shift → The model spends more steps on broad composition/structure early on.
Lower shift → More emphasis on fine details later."
Using the Anything Everywhere Node:

I want you to hook up the string to the node as such. This can be done several ways:

You can unhook it from the node it goes to (in this case, the Ksampler, and then drag it over to the new node.
You can find the dot in the center of the spaghetti, click, and then hit delete
💡Pro tip: 👀 Look hard at the options when you do this. This alone saves me a ton of typing to make getset combos. Now you know Jay's secret 🤔
You can also disconnect then hit esc and just rehook it up.
Now I want you to delete the reroutes and disconnect the spaghetti already hooked up to the KSampler and VAE decode.


See how the "model" and "latent image" connecters are highlighted? This tells you they are hooked up. If you hover over the KSampler node, the invisible connections show up as transparant lines.
⚠️Hit run again before moving on to make sure everything still functions. We will be using the anything everywhere connection moving forward, so make sure you are familiar with how it works.
Hooking up options to Samplers
In this section I will talk about using the connectors you find on almost every selection as inputs. (I moved the KSampler for visual purposes)

if you hover over one of the selections on the ksampler (eg. seed as I did here) you will see a dot appear on the lefthand side of it. This is another form of input that allows you to override the data entered in the selector
🤫 fyi, the origional data stays there in the node, so if you have an...ahem... interesting prompt entered in the clip text encopder and hook up a text box to it, the original prompt remains when said connection is undone. Make sure to clear out the node before hooking anything up.

Hook up the nodes as shown:
"show any" workaround:
In some cases you will find that certain types of data formats are not compatible with the connector on the node. This is especially common with the Scheduler node (and sampler when used as metadata). What happens in python terms is that you are taking a modified $tring and plugging it into a basic $tring.
The "Show Any" node takes anything and converts it into a regular string.
💡Pro tip: This node is also helpful to figure out what data is coming out of the node.
⚠️ a basic error with the "show any" node is when you get data that is not .json compatible (i.e trying to read the name of a model by plugging it into the model connection on a loader). in that case you need a "widget to string" node and know what data you are tryinng to get out of it (i.e unet_name for diffusion models, ckpt_name for checkpoints, just to name a few)
now double click on a blank space to open the node option menu. Type "int"

See the "ComfyLiterals" word underneath the word Int? it means it's literally just that with no frills. Select that one
💡you can also select a few others to see the difference, but use the litertal one for the exercise.
Rename it "steps" by double clicking the name, set it to 9, and hook it up to the "steps" connection as shown below.

Now double click and insert the "Float" from the comfy literals nodes. Rename it to "CFG" and set it to 1.0 and hook it up to the cfg as shown

Run the workflow to make sure we still get our furry little friend before moving on
Now using the trick I showed you above with the getset nodes, lets click and make getset nodes for all of these options. You'll have to move things around a bit to get it organized.

Note that when you change thing to getset nodes some functions will automatically name themselves. In most cases, you MUST individually name each int/ float/combo to something you want to use it for. Lets use the names of the nodes (seed, cfg, steps, etc.)
⚠️regarding the "show any" node. It seems like it would be easier to just place it before the getset node so that it populates at every point beyond that.
Why this is a bad idea: I have found that going between different samplers, refiners, etc. that it will sometimes error out using this as it wants raw data. This happens quite often on the SEGS, SAM3 and Impact packs. It is better practice to use a "show any" right before you hook up to the sampler (or any other connection) to save a F*#kload of time 😡 troubleshooting your errors later.
Run the workflow one more time to make sure the squirrel is still enjoying his lunch
Sampler Configurations
On to part 2!!! Yay
In this section I am going to walk you through different sampler configurations
Start by opening the "Part 4 example 2.json" Workflow.
I have taken all of the parts that we will reuse and placed them in the main group. I also added a setnode for the prompt. Note that I did NOT add ConditioningZeroOut here. I will have those at every workflow.

Note the Ksampler we were using at the top. Notice How I created a group called "getset nodes"(everyone's favorite 🙄). I do this so I can cut and paste and rapidly add the same connections over and over again. It is very similar to a pipe (see below) BUT.....
It's modular between workflows whereas a pipe is not AND it allows me to move any type of data I want. (also note the basic pipe just moves the same data as the "anything everywhere" node. ALSO, it eliminates the need for a bunch of custom pipe nodes.
"Thanks for coming to my TED talk"
Chainsampling
Why use it?
Preserve composition + improve quality: Run a fast/low-step first pass to lock in the overall layout and composition you like. Then chain a second sampler with more steps or different settings to refine details, boost prompt adherence, and add realism — without drastically changing the image structure.
Better control than just increasing steps: Simply raising steps on a single sampler often shifts the composition because it changes how noise is removed.
Exercise:
Create a group around these node by hitting ctrl+left mouse button and select the nodes (and group). Then, right click on any empty space and choose "add Group For Selected Nodes". We will use this to bypass this group (not yet).
Now copy and paste the entire getset node group (ctrl+c, ctrl+v) and make the connections as shown below. Do the same for the VAE decode and save image node

Note the connection of the latent and latent image nodes between the two samplers as well as the the items in the second sampler not being hooked up.
CFG. This is good for SDXL based models (illustrious, pony, noob, etc.) You would set the first sampler at your regular cfg and the second at 1.0.
For Zit it makes no difference, so go ahead and hook it up.
add_noise, return_with_leftover-noise
at the end of each image, you want as little noise as possible, but in order for an image to process, you need to inject noise into the latent, so you want leftover noise at the end of the first process for the second sampler to work with
switch the return_with_leftover-noise to "enable" on the first sampler and the add_noise on the second sampler to "disable"
start_at_step, end_at_step
The entire process is the total steps (in this case 9), but we want the samplers to switch at some point during the process

create an "Int" node using the technique I showed you earlier and hook it up as shown
you can enter it manually as well, but this is best practice
Note the number 10,000 in end_at_step. The numer of steps is defined in the "total_steps" selector. This is the maximum amount of steps samplers take. This can also be represented as -1 (python trick)
For this sampling project, we will be changing the sampler and scheduler to get different results
Go to the original KSampler I made you make a group for. right click on the header and select "bypass group nodes". They should all turn purple. This prevents it from running.
Now with the second ksampler set to euler & simple, run the workflow. Assuming you have made no changes to the original sampler and scheduler, the image should remain the same.
Now change the sampler & scheduler selection in the second Ksampler to res_2m and beta, then run it again. Note the images.
Perform the following execrises before moving on.
change the step swap (the int node you created)
change the sampler & scheduler selections
increase your total steps (above in the main area) to 12
reverse the order in which it procsses by changing the sampler & scheduler above and leaving the second Ksampler the same.
⚠️ Make sure to return the steps back to 9 and the sampler & scheduler to euler & simple before moving on
Create a group around the section, then bypass it as you did for the group above.
Sampler Custom Advanced
What I have set up for this exercise is a basic workflow for understanding what each node does. You will not typically see it set up this way as the entire purpose is to have options on how to process. This is to walk you through the basics. I will show you some advanced workflows later in this article.
Start by unbypassing the group by right clicking it and selecting "set group nodes to always"

Random Noise: The seed is the number that random moise is generated from. This node actually generates the noise. Custom versions allow you to manipulate it.
CFG Guider: as in my example I discussed earlier, the CFG controls the disatance from the negative the positive moves away from. Custom nodes treat this differently (most notably in Flux 2 and LTXV)
KSampler select: "samplers (used in KSampler and similar nodes) are different algorithms for the denoising process in Stable Diffusion. They determine how noise is gradually turned into an image over a number of steps" - Comfy docs
Custom versions of this (the most known being the Detailer Daemon) use this process to modify the outcome
Basic scheduler:
First you need to understand what a Sigma is. Sam Shark from Clownshark Batwing explains it best in her video What the Hell is a Sigma?
The most common version is Rez4lyf's Flowmatch Euler Disccrete scheduler.
💡notice how I did not use the "show any" node when hooking up the scheduler? This is one of the cases where it is not needed.
What I have set up in the workflow is almost identical to a simple KSampler if you chopped it up. Run the workflow and compare the images
Advanced Samplers
Clownshark Flowmatch setup
⚠️ Make sure to bypass all other groups

There's a lot to digest here, so lets go over the basics. I'm going to be very generallized.
Flowmatch Euler Discrete Scheudler
the controls the sigmas of generation, such as actual steps, smoothness, detail, and other items,
Emulation steps:
These are not real steps (that's controlled by the scheduler). These are the amounts of steps the sampler believes it is making. higher numers give clearer results
Denoise:
This is the amount of noise left over at the end of teh generation. Some peopel believe that leaving a little noise makes the image more realistic. (I don't). Sow ahat is it's true purpose?????
Hi res fix and upscaling
Leaving a little noise helps the upscaler and hi-res fix grab onto something. Very similar to when you use chainsamplers.
ETA: This is a clownshark specialty. This tells the sampler how much noise to inject into each step. higher number yield smoother images at the end.
Bongmath: This is just a better way of doeing the math tehat increases performance without losing quality
run this workflow and mess with the settings before moving on.
💡Pro tip. Sliders:
I hate entering numbers. i'd rather have a slider do it for me. Here's how to set them.

Right click on one and open the properties panel:
value: what it is currently set to
min: lowest number it can go
max: Duh
Step: How much does it change when you slide. For example, my favorite is for Float numbers. I'll set this to 0.5, 0.1 or 0.05, 0.25 so that I don't have a bunch of unnecessary options.
Decimals: By default this is an "INT" slider and will remain so until you change this.
1 equals 0.1
2 equals 0.01
this changes the data type to "float".
💡😡 pro (angry) tip: Getset node will suddenly decide they want a divorce and not work. Make sure to change treh paramaters of the slider BEFORE you hook up the getset nodes.
Detailer Daemon Sampler Setup
⚠️ Make sure to bypass all other groups

It does what it says. It adds details to any image
Practical test. Make adjustments to the detail amount. Pay attention to the Squirrel.
Notes are on the workflow for adjustments.
Summary:
A game:
500 ⚡to the first person can correctly tell me the squirrel's name. There is only one correct answer. Comment below.
I hope that is was a valuable article and that you enjoyed it. Please leave me a feedback.
Please comment and let me know what you think
Instagram: https://www.instagram.com/synth.studio.models/
Buy me a☕ https://ko-fi.com/lonecatone
This represents Many of hours of work. If you enjoy it, please 👍like, 💬 comment , and feel free to ⚡tip 😉

