5 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
946fca3e18 Fix trailing whitespace in Live Preview node
Co-authored-by: jags111 <5968619+jags111@users.noreply.github.com>
2026-02-03 23:14:33 +00:00
copilot-swe-agent[bot]
3b2a5a36ad Add documentation for Live Preview node in README
Co-authored-by: jags111 <5968619+jags111@users.noreply.github.com>
2026-02-03 23:14:01 +00:00
copilot-swe-agent[bot]
73d807aa40 Add .gitignore and remove __pycache__ from tracking
Co-authored-by: jags111 <5968619+jags111@users.noreply.github.com>
2026-02-03 23:11:37 +00:00
copilot-swe-agent[bot]
b80d754d1f Add TSC_LivePreview node for live preview with pass-through
Co-authored-by: jags111 <5968619+jags111@users.noreply.github.com>
2026-02-03 23:11:21 +00:00
copilot-swe-agent[bot]
a075f2b7f9 Initial plan 2026-02-03 22:59:34 +00:00
3 changed files with 42 additions and 36 deletions

22
.gitignore vendored
View File

@@ -4,30 +4,12 @@ __pycache__/
*$py.class
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# Virtual environments
venv/
ENV/
env/
ENV/
# IDEs
# IDE
.vscode/
.idea/
*.swp

View File

@@ -131,6 +131,17 @@ Please check out our WIKI for any use cases and new developments including workf
<img src="https://github.com/LucianoCirino/efficiency-nodes-media/blob/main/images/nodes/Image%20Overlay%20-%20Node%20Example.png" width="1080">
</p>
</details>
<!-------------------------------------------------------------------------------------------------------------------------------------------------------->
<details>
<summary><b>Live Preview (Eff.)</b></summary>
<ul>
<li>Node that displays a live preview of images while allowing them to pass through to other nodes in the workflow.</li>
<li>Can be connected to multiple samplers sequentially to show progressive updates as the workflow advances through different stages (base sampling, refining, hi-res fix, detailing, etc.).</li>
<li>Useful for placing preview displays outside of subgraphs or in custom locations within complex workflows.</li>
<li>Simply connect the IMAGE output from any sampler or image processing node to this node's input, and connect its output to continue the workflow.</li>
</ul>
</details>
<!-------------------------------------------------------------------------------------------------------------------------------------------------------->
<details>

View File

@@ -99,16 +99,6 @@ def encode_prompts(positive_prompt, negative_prompt, token_normalization, weight
elif return_type == "both":
return positive_encoded, negative_encoded, clip, refiner_positive_encoded, refiner_negative_encoded, refiner_clip
########################################################################################################################
# Helper function for VAE error message
def get_missing_vae_error(ckpt_name):
"""Generate error message for checkpoints without embedded VAE"""
return (
f"Checkpoint '{ckpt_name}' does not contain an embedded VAE. "
f"This checkpoint (likely an AIO model) requires an external VAE. "
f"Please select a VAE file instead of 'Baked VAE'."
)
########################################################################################################################
# TSC Efficient Loader
class TSC_EfficientLoader:
@@ -176,9 +166,6 @@ class TSC_EfficientLoader:
f"{warning('Efficiency Nodes:')} Baked VAE not found in cache, loading checkpoint to extract VAE...")
_, _, vae = load_checkpoint(ckpt_name, my_unique_id, output_vae=True, cache=ckpt_cache,
cache_overwrite=True)
# Check if VAE extraction was successful
if vae is None:
raise ValueError(get_missing_vae_error(ckpt_name))
else:
model, clip, vae = load_checkpoint(ckpt_name, my_unique_id, cache=ckpt_cache, cache_overwrite=True)
lora_params = None
@@ -208,9 +195,6 @@ class TSC_EfficientLoader:
# Check for custom VAE
if vae_name != "Baked VAE":
vae = load_vae(vae_name, my_unique_id, cache=vae_cache, cache_overwrite=True)
elif vae is None:
# If "Baked VAE" was selected but checkpoint has no embedded VAE
raise ValueError(get_missing_vae_error(ckpt_name))
# Data for XY Plot
dependencies = (vae_name, ckpt_name, clip, clip_skip, refiner_name, refiner_clip, refiner_clip_skip,
@@ -4029,6 +4013,34 @@ class TSC_ImageOverlay:
# Return the edited base image
return (base_image,)
########################################################################################################################
# TSC Live Preview Node
class TSC_LivePreview:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"images": ("IMAGE",),
},
"hidden": {
"prompt": "PROMPT",
"extra_pnginfo": "EXTRA_PNGINFO"
},
}
RETURN_TYPES = ("IMAGE",)
FUNCTION = "preview_image"
OUTPUT_NODE = True
CATEGORY = "Efficiency Nodes/Image"
def preview_image(self, images, prompt=None, extra_pnginfo=None):
# Generate preview using ComfyUI's PreviewImage node
preview = PreviewImage().save_images(images, prompt=prompt, extra_pnginfo=extra_pnginfo)["ui"]
# Return both the preview for UI and the original images for pass-through
return {"ui": preview, "result": (images,)}
########################################################################################################################
# Noise Sources & Seed Variations
# https://github.com/shiimizu/ComfyUI_smZNodes
@@ -4304,6 +4316,7 @@ NODE_CLASS_MAPPINGS = {
"Manual XY Entry Info": TSC_XYplot_Manual_XY_Entry_Info,
"Join XY Inputs of Same Type": TSC_XYplot_JoinInputs,
"Image Overlay": TSC_ImageOverlay,
"Live Preview (Eff.)": TSC_LivePreview,
"Noise Control Script": TSC_Noise_Control_Script,
"HighRes-Fix Script": TSC_HighRes_Fix,
"Tiled Upscaler Script": TSC_Tiled_Upscaler,