If you've ever loaded a checkpoint, wired up two CLIP Text Encode nodes, dropped a KSampler, an Empty Latent Image, a VAE Decode and a Save Image just to get one picture out - this node is that whole graph, squashed flat. txt2img is the example "integrated node" that ships with palant's Integrated Nodes for ComfyUI pack, and it does exactly what a stock text-to-image workflow does, just as a single box instead of six.
That's the entire point of the pack, so it's worth understanding before you decide whether you want it. Integrated Nodes doesn't add new generation capability - it's a tool for taking a workflow (or part of one) and freezing it into a reusable, single node with its own widgets. ComfyUI already has two native answers to "I want to reuse a chunk of graph" - Group Nodes and, more recently, Subgraphs - and people on r/comfyui reach for both regularly. The complaint that keeps showing up is that a Group Node is a bit of a black box: you can bundle nodes into one, but editing it afterward, or choosing exactly which inputs and outputs surface, is clunky. Integrated Nodes solves the same problem with a YAML config file instead of an in-app dialog, which means you get real control over which widgets show up, what they're renamed to, and which inputs get merged together - at the cost of needing a restart every time you change the config.
What you actually get
txt2img is the reference example: load a checkpoint, encode a positive and a negative prompt, sample, decode, save. Nothing about the underlying math is different from doing it by hand - it's the standard SD-style txt2img loop, not a new sampling technique.
The widgets that matter, in the order you'll actually touch them:
- ckpt_name - pick any checkpoint you already have installed. This node doesn't bundle a model; it just wires to whichever one you choose, same as a normal Load Checkpoint node.
- text and text_2 - your two prompts, positive and negative respectively (mirroring the two CLIP Text Encode nodes underneath).
- seed, steps, cfg, sampler_name, scheduler, denoise - the standard KSampler dials. Steps is "how many denoising passes," CFG is how hard the model chases your prompt versus generating freely, and denoise at 1.0 means starting from pure noise (this node always starts from an Empty Latent Image, so you'd only touch denoise if you're using it as a template for something else).
- width, height, batch_size - your Empty Latent Image settings.
- filename_prefix - passed straight to Save Image.
There's no output socket on this node - check is_output_node and you'll see it's true, meaning Save Image is baked in and the result lands straight in your output folder. That's convenient for a one-shot generation, but it also means you can't chain the result into an upscaler or a second pass without either building your own integrated node without the Save Image step, or falling back to the plain nodes.
One thing worth knowing if you build your own version of this: sampler_name and scheduler are populated by the pack from whatever ComfyUI itself supports, and what's "correct" here depends entirely on which checkpoint you loaded. A CFG of 7-8 and DPM++ 2M Karras is the safe SD 1.5/SDXL default; a modern flow-matching or guidance-distilled checkpoint (Flux, Z-Image Turbo and friends) usually wants CFG near 1 and hates a Karras schedule. This node doesn't know or care what family your checkpoint belongs to - it just passes the numbers through, so get those from the model card, not from the node.
Installing it
Two ways, same result:
- ComfyUI Manager - search for "Integrated Nodes for ComfyUI" and install.
- Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/palant/integrated-nodes-comfyui, then restart ComfyUI.
There's no model download and no extra Python dependency to worry about - it's pure server-side wiring around nodes ComfyUI already ships. The pack reads an integrated_nodes.yaml file (falling back to the bundled integrated_nodes.yaml.example, which is where txt2img comes from) at startup, so any edits to that file need a restart before they show up.
Common issues
The node looks tiny or empty when you first drop it. This is a known ComfyUI rendering quirk, not a bug in the pack - nodes containing multiline text widgets (your two prompt boxes) tend to size themselves wrong on first placement. Drag the corner to resize and everything's there.
control_after_generate won't stick to a default. If you're editing the underlying workflow file to change defaults, note this one widget can't be pinned - it's a client-side-only feature with no server equivalent, so the pack can't touch it. Not something you can fix from the YAML.
"Where's my image?" Since this node saves internally, look in your ComfyUI output/ folder (or wherever filename_prefix points), not at a node output socket - there isn't one.
Nothing happens after cloning. Restart ComfyUI. The repo's own instructions are explicit about this, and it's the most common miss - a hot-reload isn't enough for a custom node package to register.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | The random seed used for creating the noise. |
| steps | INT | 201–10000 | The number of steps used in the denoising process. |
| cfg | FLOAT | 8.00–100 | The Classifier-Free Guidance scale balances creativity and adherence to the prompt. Higher values result in images more closely matching the prompt however too high values will negatively impact quality. |
| sampler_name | COMBO | The algorithm used when sampling, this can affect the quality, speed, and style of the generated output. | |
| scheduler | COMBO | The scheduler controls how noise is gradually removed to form the image. | |
| denoise | FLOAT | 1.000–1 | The amount of denoising applied, lower values will maintain the structure of the initial image allowing for image to image sampling. |
| ckpt_name | COMBO | The name of the checkpoint (model) to load. | |
| text | STRING | The text to be encoded. | |
| text_2 | STRING | The text to be encoded. | |
| filename_prefix | STRING | ComfyUI | The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes. |
| width | INT | 51216–16384 | The width of the latent images in pixels. |
| height | INT | 51216–16384 | The height of the latent images in pixels. |
| batch_size | INT | 11–4096 | The number of latent images in the batch. |
Outputs (0)
No outputs