Pipe In Context iGEN v2
The RvTools context pipe
- base_ctx
- model
- clip
- vae
- positive
- negative
- cond_1
- cond_2
- cond_3
- cond_4
- latent
- images
- image_ref
- image_preproc
- mask1
- mask2
- mask3
- mask4
- sampler
- scheduler
- context
- model
- clip
- vae
- positive
- negative
- cond_1
- cond_2
- cond_3
- cond_4
- latent
- images
- image_ref
- image_preproc
- mask1
- mask2
- mask3
- mask4
- sampler
- scheduler
- steps
- cfg
- guidance
- seed
- width
- height
- batch_size
- scale_by
- text_pos
- text_pos_i2p
- text_neg
- model_name
- vae_name
- lora_names
- path
If you've ever stared at a workflow where six colored wires snake from a checkpoint loader, past a KSampler, into some distant node you can no longer see, this node is the duct tape. Pipe In Context iGEN v2 collapses a whole generation state - model, clip, vae, both conditionings, latents, images, masks, sampler settings, and a pile of text - into one pipe wire, and then splits it back out again on the other side so anything downstream can grab exactly the slot it needs.
The idea is straight from rgthree's Context nodes, and the code admits as much in a comment: it's "taken from rgthree context utils." The author grafted that concept onto the RvTools pipe format and gave it an "iGEN" (image-generation) twist by carrying the extra slots a full pipeline wants.
How it works
Every RvTools pipe is a bundle. For the plain loaders that bundle is nine slots - model, clip, vae, latent, width, height, batch_size, model_name, vae_name. This node's context pipe is bigger: feed it a base_ctx pipe plus any of the ~30 optional inputs, and it merges them into a fresh context. Whatever you leave unconnected falls back to the base_ctx value; whatever you do connect overrides it. The context output hands you the merged pipe, and every individual output (model, clip, positive, seed, widthβ¦) gives you the same value broken out, so you never have to unwrap the pipe to use one field.
What the iGEN v2 flavor adds over a plain pipe is the generation payload: image_ref, image_preproc, mask1βmask4, text_pos, text_pos_i2p, text_neg, guidance, scale_by, model_name, vae_name, lora_names and path. In other words, it carries everything an image-to-image or model-swapping workflow needs, not just the sampler basics.
The inputs that matter
base_ctx- the starting pipe. Chain this node off another RvTools pipe (like a Checkpoint Loader pipe) to inherit its state.model,clip,vae,positive,negative- the big five, overriding whatever the base context carried.text_pos,text_neg- your prompt text as plain strings, passed through the pipe.path,model_name,vae_name- strings that tie in nicely with the Project Folder and checkpoint loader nodes in this same pack.
Output side, the ones you'll actually wire are context (into another pipe consumer), plus model/clip/vae and positive/negative into your sampler.
Installing it
The pack installs like any custom node:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI-RvTools_v2
Restart ComfyUI, or search "ComfyUI-RvTools_v2" in ComfyUI Manager and hit Install. Dependencies are just opencv-python, pilgram, pynvml and piexif on top of the usual torch/numpy - nothing heavy, no model downloads.
Common issues
The big one is that this pack is no longer maintained - the README says so at the top and points you to the successor, ComfyUI_Eclipse, which includes most of these nodes. That's fine for a node this stable: a context pipe that's worked since mid-2025 will keep working. The other gotcha is version confusion: the original RvTools repo was deleted by the author, so old workflows referencing v1 node names fail with missing-node errors, and ComfyUI Manager can't install them. If you pulled a workflow and it complains about a [RvTools] node, make sure it's actually asking for a v2 name.
Inputs (35)
| Name | Type | Default | Description |
|---|---|---|---|
| base_ctxopt | pipe | β | |
| modelopt | MODEL | β | |
| clipopt | CLIP | β | |
| vaeopt | VAE | β | |
| positiveopt | CONDITIONING | β | |
| negativeopt | CONDITIONING | β | |
| cond_1opt | CONDITIONING | β | |
| cond_2opt | CONDITIONING | β | |
| cond_3opt | CONDITIONING | β | |
| cond_4opt | CONDITIONING | β | |
| latentopt | LATENT | β | |
| imagesopt | IMAGE | β | |
| image_refopt | IMAGE | β | |
| image_preprocopt | IMAGE | β | |
| mask1opt | MASK | β | |
| mask2opt | MASK | β | |
| mask3opt | MASK | β | |
| mask4opt | MASK | β | |
| sampleropt | * | β | |
| scheduleropt | * | β | |
| stepsopt | INT | β | |
| cfgopt | FLOAT | β | |
| guidanceopt | FLOAT | β | |
| seedopt | INT | β | |
| widthopt | INT | β | |
| heightopt | INT | β | |
| batch_sizeopt | INT | β | |
| scale_byopt | FLOAT | β | |
| text_posopt | STRING | β | |
| text_pos_i2popt | STRING | β | |
| text_negopt | STRING | β | |
| model_nameopt | STRING | β | |
| vae_nameopt | STRING | β | |
| lora_namesopt | STRING | β | |
| pathopt | STRING | β |
Outputs (35)
| Name | Type | Description |
|---|---|---|
| context | pipe | β |
| model | MODEL | β |
| clip | CLIP | β |
| vae | VAE | β |
| positive | CONDITIONING | β |
| negative | CONDITIONING | β |
| cond_1 | CONDITIONING | β |
| cond_2 | CONDITIONING | β |
| cond_3 | CONDITIONING | β |
| cond_4 | CONDITIONING | β |
| latent | LATENT | β |
| images | IMAGE | β |
| image_ref | IMAGE | β |
| image_preproc | IMAGE | β |
| mask1 | MASK | β |
| mask2 | MASK | β |
| mask3 | MASK | β |
| mask4 | MASK | β |
| sampler | * | β |
| scheduler | * | β |
| steps | INT | β |
| cfg | FLOAT | β |
| guidance | FLOAT | β |
| seed | INT | β |
| width | INT | β |
| height | INT | β |
| batch_size | INT | β |
| scale_by | FLOAT | β |
| text_pos | STRING | β |
| text_pos_i2p | STRING | β |
| text_neg | STRING | β |
| model_name | STRING | β |
| vae_name | STRING | β |
| lora_names | STRING | β |
| path | STRING | β |