160 lines
5.7 KiB
Markdown
160 lines
5.7 KiB
Markdown
# Uber Comfy Nodes - Misc ComfyUI Nodes
|
||
|
||
|
||
Handy "scratch-itch" nodes I've built while working in ComfyUI.
|
||
Install the repo via **Comfy Manager** (recommended), then restart ComfyUI. All nodes appear under **Uber Comfy**.
|
||
|
||
|
||
---
|
||
|
||
|
||
## Node list
|
||
|
||
|
||
| # | Display name | What it does | Typical use-case |
|
||
|---|--------------|--------------|------------------|
|
||
| 1 | **ControlNet Selector** | Dropdown of every ControlNet file; *does not* load the model. | Pick once, pass name downstream. |
|
||
| 2 | **Load Optional ControlNet Model** | Core loader fork with an extra **None** option so a workflow can disable ControlNet on the fly. | On/off toggles without duplicate graphs. |
|
||
| 3 | **Diffusers Selector** | Dropdown of every Diffusers-format model folder; zero weight loading. | Feed the chosen path to custom loaders or merge nodes. |
|
||
| 4 | **Save Image JPG No Meta** | Saves JPG (set quality) **without** PNG metadata chunks. | Produce lightweight web images. |
|
||
| 5 | **Multi Input Variable Rewrite** | Up to 26 optional inputs (`{a}`…`{z}`) replace placeholders inside a template string. | Dynamic prompts, filename templating. |
|
||
| 6 | **Text Regex Operations** | Chain up to 20 regex find/replace operations, each with its own pattern, replacement, and multiline flag. | Complex multi-step text processing and caption cleanup. |
|
||
| 7 | **Video Segment Calculator** | Given clip duration, FPS & index, returns frame count, skip offset, precise start/end times (optional overlap). | Slice long videos into equal segments. |
|
||
| 8 | **Model Similarity Node** | Compares two Stable-Diffusion models (tested SD1.x and SDXL so far) **MODEL** sockets. Calculates cosine similarity across every self-attention layer in input, middle and output blocks. | Detect fine-tunes, merges, or genuine scratch-trained checkpoints. |
|
||
| 9 | **Model Weight Dumper** | Dumps all weight keys from a **MODEL** socket with optional shape/dtype info and prefix filtering. | Inspect model architecture, debug custom loaders, compare layer structures. |
|
||
| 10 | **Runware Resolution Calculator** | Analyzes input image (with optional mask) and selects optimal resolution from model-specific presets using aspect ratio matching and area utilization scoring. | Auto-select best generation resolution for Nano Banana 2 and similar models. |
|
||
| 11 | **Adaptive Image Scaler** | Intelligent scaling with automatic ML upscaler engagement (>1.08× scale), progressive tile reduction on OOM, and synchronized alpha channel processing. | High-quality upscaling with fallback safety and dimension alignment. |
|
||
|
||
|
||
---
|
||
|
||
|
||
## Example – Model Similarity Node
|
||
|
||
|
||
```
|
||
[Checkpoint Loader] ─► base_model
|
||
[Checkpoint Loader] ─► target_model
|
||
╰─► Model Similarity Node
|
||
```
|
||
|
||
|
||
Possible outputs:
|
||
|
||
|
||
```
|
||
Similarity: 0-5 % → truly independent training
|
||
Similarity: 60-90 % → fine-tune / weight-merge
|
||
Similarity: 95 %+ → almost identical weights
|
||
```
|
||
|
||
|
||
---
|
||
|
||
|
||
## Examples for Selected Nodes
|
||
|
||
|
||
### Text Regex Operations
|
||
```
|
||
Input text: "
|
||
*Start* of line and some extra text $5.99."
|
||
|
||
|
||
num_operations: 3
|
||
Pattern 1: "^\*" → Replacement 1: "-" (convert bullet * at line start to dash -)
|
||
Pattern 2: "\*(.*?)\*" → Replacement 2: "" (remove asterisks around words)
|
||
Pattern 3: "\$(.+)" → Replacement 3: "Price: \1" (label prices starting with $)
|
||
|
||
|
||
use_multiline_1: true
|
||
use_multiline_2: false
|
||
use_multiline_3: false
|
||
|
||
|
||
Output: "-Start of line and some extra text Price: 5.99."
|
||
```
|
||
|
||
|
||
### Multi Input Variable Rewrite
|
||
```
|
||
Input text: "Create {a} image of {b} in {c} style"
|
||
Input a: "a beautiful"
|
||
Input b: "mountains"
|
||
Input c: "anime"
|
||
Output: "Create a beautiful image of mountains in anime style"
|
||
```
|
||
|
||
|
||
### Video Segment Calculator
|
||
```
|
||
Duration: 45.0 seconds, FPS: 30.0, Index: 2
|
||
Output: frame_load_cap=1350, skip_first_frames=2700, start_time=90.0, end_time=135.0
|
||
(Use this to split a 2-minute video into 45-second chunks and process second 90-135 separately)
|
||
```
|
||
|
||
|
||
### Load Optional ControlNet Model
|
||
```
|
||
Set ControlNet name to "None" to disable ControlNet loading in workflows without rebuilding.
|
||
```
|
||
|
||
|
||
### Save Image JPG No Meta
|
||
```
|
||
Saves all images in the batch as JPG files with the specified quality without writing any metadata
|
||
```
|
||
|
||
|
||
### Model Weight Dumper
|
||
```
|
||
[Checkpoint Loader] ─► MODEL ─► Model Weight Dumper
|
||
|
||
show_shapes: true
|
||
filter_prefix: "model.diffusion_model.input_blocks"
|
||
|
||
Output: Text list of all matching weight keys with shapes and dtypes
|
||
Example output line: "model.diffusion_model.input_blocks.0.0.weight → (320, 4, 3, 3) (torch.float16)"
|
||
```
|
||
|
||
|
||
### Runware Resolution Calculator
|
||
```
|
||
Input: Full image (1920×1080), cropped image, mask highlighting subject area (400×600px ROI)
|
||
model_preset: "Nano Banana 2"
|
||
|
||
Process:
|
||
- Analyzes ROI aspect ratio (2:3 portrait)
|
||
- Tests fitting strategies (width-anchor, height-anchor, proportional)
|
||
- Scores resolutions by expansion efficiency and scale match
|
||
|
||
Output: width=896, height=1200 (optimal 2:3 portrait from preset)
|
||
Console: "✓ Selected: 896×1200 (expansion: 2.15x)"
|
||
```
|
||
|
||
|
||
### Adaptive Image Scaler
|
||
```
|
||
Scenario 1: Small upscale (1024×1024 → 1152×1152, scale 1.125x)
|
||
interpolation: "lanczos"
|
||
upscale_model: (connected)
|
||
dimension_alignment: 64
|
||
|
||
Process: Engages ML upscaler (>1.08× threshold), tiles at 512px, adjusts to 1152×1152 (64px aligned)
|
||
Output: High-quality ML-upscaled image with alpha channel preserved via bicubic interpolation
|
||
|
||
|
||
Scenario 2: Large downscale (4096×4096 → 1024×1024, scale 0.25x)
|
||
interpolation: "area"
|
||
upscale_model: None
|
||
|
||
Process: Uses direct "area" interpolation (best for downscaling), bypasses ML model
|
||
Output: Clean downscaled image with all 4 channels preserved
|
||
```
|
||
|
||
|
||
---
|
||
|
||
|
||
*Open an issue or PR if you spot a missing utility—this repo will keep growing as new workflow gaps appear.*
|