Nodes/ComfyUI_Eclipse/IO Context Image
ComfyUI Node

IO Context Image

Bundle a whole generation into one wire

By r-vageΒ·Created 10 months agoΒ·Updated a day agoΒ· 31
IO Context Image
  • pipe
  • model
  • clip
  • vae
  • positive
  • negative
  • latent
  • images_ref
  • images_pp
  • images_output
  • mask
  • sampler_name
  • scheduler
  • audio_vae
  • context
  • model
  • clip
  • vae
  • positive
  • negative
  • latent
  • images_ref
  • images_pp
  • images_output
  • mask
  • steps
  • cfg
  • sampler_name
  • scheduler
  • guidance
  • denoise
  • clip_skip
  • seed
  • width
  • height
  • batch_size
  • text_pos
  • text_i2p
  • text_neg
  • model_name
  • vae_name
  • lora_names
  • path
  • purge
  • audio_vae
β—„stepsβ€”β–Ί
β—„cfgβ€”β–Ί
β—„guidanceβ€”β–Ί
β—„denoiseβ€”β–Ί
β—„clip_skipβ€”β–Ί
β—„seedβ€”β–Ί
β—„widthβ€”β–Ί
β—„heightβ€”β–Ί
β—„batch_sizeβ€”β–Ί
β—„text_posβ€”β–Ί
β—„text_i2pβ€”β–Ί
β—„text_negβ€”β–Ί
β—„model_nameβ€”β–Ί
β—„vae_nameβ€”β–Ί
β—„lora_namesβ€”β–Ί
β—„pathβ€”β–Ί
β—„purgeβ€”β–Ί

A typical image-generation workflow wants its sampler fed model, clip, vae, positive and negative conditioning, a latent, dimensions, steps, cfg, seed, and more - call it a dozen values. Drag each as its own wire and you get the noodle plate that makes shared workflows unreadable. The IO Context Image is Eclipse's answer: it bundles all of those into one PIPE that travels down a single wire, and spits every component back out so any node can pull off just what it needs.

What it is

This is the image-generation context manager for the Eclipse pipe ecosystem - think rgthree's Context node, which the source code explicitly credits. It has a long list of optional inputs (everything is optional) and, on the output side, the bundled context pipe plus an exploded output for each individual field. You can feed it a partial context, merge in new values, and get back a complete bundle that carries the whole generation state downstream.

The fields it carries tell you what the pack considers "a generation": model, clip, vae, positive/negative conditioning, latent, three image slots (images_ref, images_pp, images_output), mask, the sampler settings (steps, cfg, sampler_name, scheduler, guidance, denoise, clip_skip, seed), dimensions and batch_size, the prompt text (text_pos, text_i2p, text_neg), model/vae/lora names for metadata, a path, a purge flag, and even audio_vae (appended last so existing pipe slots don't shift).

How it works

The mechanism is the whole reason context nodes exist. The node builds a fresh dictionary: it starts from any input pipe you connect (merging its existing keys), then overlays every input you've wired or set - a connected value overwrites whatever came in the pipe. The output context is that dictionary, and each named output is just ctx.get(field). So it's a merge-and-explode node: you can daisy-chain contexts, replacing one field at a time.

The inputs that matter most for a beginner:

  • pipe - feed an existing context in to start from it (upstream loader, another context).
  • model / clip / vae / positive / negative / latent - the actual generation components.
  • seed / steps / cfg / denoise / sampler_name / scheduler - the settings that normally live on a KSampler.
  • width / height / batch_size - dimensions for latent creation downstream.

What goes in, what comes out

Everything optional in, one context (PIPE) plus all fields out. That "everything also comes out individually" design is the trick that keeps it composable: a downstream KSampler can take the context wire, or just the three wires it actually wants. You're not forced into a pure pipe workflow - it degrades gracefully to normal nodes.

Install

Ships in ComfyUI_Eclipse (formerly RvTools, rewritten in v4.0.0). ComfyUI Manager β†’ search ComfyUI_Eclipse β†’ install β†’ restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse

It's under Eclipse β†’ Pipe. No model downloads; dependencies are the standard stack (torch, numpy, Pillow, opencv-python).

Troubleshooting

  • A field is None downstream: you set it in the context but the consumer reads the exploded output, or vice versa - both carry the same value, so check which socket you wired.
  • "Stale context" bug: the classic context-pipe failure. The bundle was assembled before a LoRA loaded or a latent was replaced, so you silently run the old value. When in doubt, trace the context wire's origin, not the node itself.
  • Old RvTools workflows: pre-v4.0.0 node IDs were removed; run python tools/migrate_workflow.py <file>.json to migrate.
CategoryπŸŒ’ Eclipse/ Pipe

Inputs (31)

NameTypeDefaultDescription
pipeoptPIPEOptional input for 'pipe'.
modeloptMODELOptional input for 'model'.
clipoptCLIPOptional input for 'clip'.
vaeoptVAEOptional input for 'vae'.
positiveoptCONDITIONINGOptional input for 'positive'.
negativeoptCONDITIONINGOptional input for 'negative'.
latentoptLATENTOptional input for 'latent'.
images_refoptIMAGEOptional input for 'images_ref'.
images_ppoptIMAGEOptional input for 'images_pp'.
images_outputoptIMAGEOptional input for 'images_output'.
maskoptMASKOptional input for 'mask'.
stepsoptINTOptional input for 'steps'.
cfgoptFLOATOptional input for 'cfg'.
sampler_nameopt*Optional input for 'sampler_name'.
scheduleropt*Optional input for 'scheduler'.
guidanceoptFLOATOptional input for 'guidance'.
denoiseoptFLOATOptional input for 'denoise'.
clip_skipoptINTOptional input for 'clip_skip'.
seedoptINTOptional input for 'seed'.
widthoptINTOptional input for 'width'.
heightoptINTOptional input for 'height'.
batch_sizeoptINTOptional input for 'batch_size'.
text_posoptSTRINGOptional input for 'text_pos'.
text_i2poptSTRINGOptional input for 'text_i2p'.
text_negoptSTRINGOptional input for 'text_neg'.
model_nameoptSTRINGOptional input for 'model_name'.
vae_nameoptSTRINGOptional input for 'vae_name'.
lora_namesoptSTRINGOptional input for 'lora_names'.
pathoptSTRINGOptional input for 'path'.
purgeoptBOOLEANOptional input for 'purge'.
audio_vaeoptVAEOptional input for 'audio_vae'.

Outputs (31)

NameTypeDescription
contextPIPEβ€”
modelMODELβ€”
clipCLIPβ€”
vaeVAEβ€”
positiveCONDITIONINGβ€”
negativeCONDITIONINGβ€”
latentLATENTβ€”
images_refIMAGEβ€”
images_ppIMAGEβ€”
images_outputIMAGEβ€”
maskMASKβ€”
stepsINTβ€”
cfgFLOATβ€”
sampler_name*β€”
scheduler*β€”
guidanceFLOATβ€”
denoiseFLOATβ€”
clip_skipINTβ€”
seedINTβ€”
widthINTβ€”
heightINTβ€”
batch_sizeINTβ€”
text_posSTRINGβ€”
text_i2pSTRINGβ€”
text_negSTRINGβ€”
model_nameSTRINGβ€”
vae_nameSTRINGβ€”
lora_namesSTRINGβ€”
pathSTRINGβ€”
purgeBOOLEANβ€”
audio_vaeVAEβ€”