style(kikotools): Update category names and refactor nodes

This commit is contained in:
Vito Sansevero
2025-08-08 21:01:48 -07:00
parent c0d239f31f
commit ca9fd5153a
23 changed files with 34 additions and 36 deletions
+5 -4
View File
@@ -34,7 +34,7 @@ I’m sharing them here with the community, and I hope you find them as useful a
| [🔍 Display Any](#-display-any) | Universal debugging tool for any data type | 👁️ Display |
| [🖼️ Image to Multiple Of](#️-image-to-multiple-of) | Adjust dimensions to multiples for compatibility | 🖼️ Resolution |
| [📉 Image Scale Down By](#-image-scale-down-by) | Scale images down by a factor with quality preservation | 🖼️ Resolution |
| [🎬 Kiko Film Grain](#-kiko-film-grain) | Add realistic film grain effects to images | 💾 Images |
| [🎬 Film Grain](#-film-grain) | Add realistic film grain effects to images | 💾 Images |
| [🔤 Embedding Autocomplete](#-embedding-autocomplete) | Smart autocomplete for embeddings, LoRAs, and tags | 🔧 Utils |
### 🧰 xyz-helpers Tools
@@ -244,7 +244,7 @@ Efficiently scale images down by a specified factor with quality preservation.
- Quick downsampling for performance optimization
- Prepare images for web display or transmission
#### 🎬 Kiko Film Grain
#### 🎬 Film Grain
Add realistic analog film grain effects to generated images.
- **Realistic Grain Simulation**: Mimics actual film photography characteristics
@@ -630,7 +630,7 @@ Example workflow available: [xyz_helpers_lora_testing.json](examples/workflows/x
| **Display Any** | Universal debugging tool for any data type or tensor shapes | ✅ Complete | [Docs](examples/documentation/display_any.md) |
| **Image to Multiple Of** | Adjust image dimensions to multiples for model compatibility | ✅ Complete | [Docs](examples/documentation/image_to_multiple_of.md) |
| **Image Scale Down By** | Efficiently scale images down by a specified factor | ✅ Complete | [Docs](examples/documentation/image_scale_down_by.md) |
| **Kiko Film Grain** | Add realistic analog film grain effects to images | ✅ Complete | [Docs](examples/documentation/kiko_film_grain.md) |
| **Film Grain** | Add realistic analog film grain effects to images | ✅ Complete | [Docs](examples/documentation/film_grain.md) |
| **Flux Sampler Params** | FLUX-optimized parameter generator with batch support | ✅ Complete | [Docs](examples/documentation/flux_sampler_params.md) |
| **LoRA Folder Batch** | Batch process multiple LoRAs from folders | ✅ Complete | [Docs](examples/documentation/lora_folder_batch.md) |
| **Plot Parameters** | Visualize parameter effects with graphs | ✅ Complete | [Docs](examples/documentation/plot_parameters.md) |
@@ -930,7 +930,8 @@ MIT License - see [LICENSE](LICENSE) file for details.
## 📈 Stats
- **Nodes**: 20 (13 core tools + 6 xyz-helpers + 1 settings node)
- **Nodes**: 19 (13 core tools + 6 xyz-helpers)
- **Features**: Embedding Autocomplete (settings-based, not a node)
- **Categories**: 9 emoji-based categories for better organization
- **Format Support**: 3 (PNG, JPEG, WebP with advanced controls)
- **Presets**: 26 curated resolution presets
+8 -11
View File
@@ -16,14 +16,10 @@ from .tools.resolution_calculator import ResolutionCalculatorNode
from .tools.sampler_combo import SamplerComboCompactNode, SamplerComboNode
from .tools.seed_history import SeedHistoryNode
from .tools.width_height_selector import WidthHeightSelectorNode
from .tools.xyz_helpers import (
FluxSamplerParamsNode,
LoRAFolderBatchNode,
PlotParametersNode,
SamplerSelectHelperNode,
SchedulerSelectHelperNode,
TextEncodeSamplerParamsNode,
)
from .tools.xyz_helpers import (FluxSamplerParamsNode, LoRAFolderBatchNode,
PlotParametersNode, SamplerSelectHelperNode,
SchedulerSelectHelperNode,
TextEncodeSamplerParamsNode)
# ComfyUI node registration mappings
NODE_CLASS_MAPPINGS = {
@@ -46,7 +42,8 @@ NODE_CLASS_MAPPINGS = {
"FluxSamplerParams": FluxSamplerParamsNode,
"PlotParameters+": PlotParametersNode,
"LoRAFolderBatch": LoRAFolderBatchNode,
"KikoEmbeddingAutocomplete": KikoEmbeddingAutocomplete,
# Note: KikoEmbeddingAutocomplete is not registered as a node
# It's a settings-only feature accessed through ComfyUI settings menu
}
NODE_DISPLAY_NAME_MAPPINGS = {
@@ -62,14 +59,14 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"GeminiPrompt": "Gemini Prompt Engineer",
"DisplayAny": "Display Any",
"DisplayText": "Display Text",
"KikoFilmGrain": "Kiko Film Grain",
"KikoFilmGrain": "Film Grain",
"SamplerSelectHelper": "Sampler Select Helper",
"SchedulerSelectHelper": "Scheduler Select Helper",
"TextEncodeSamplerParams": "Text Encode for Sampler Params",
"FluxSamplerParams": "Flux Sampler Parameters",
"PlotParameters+": "Plot Parameters",
"LoRAFolderBatch": "LoRA Folder Batch",
"KikoEmbeddingAutocomplete": "🫶 Embedding Autocomplete Configuration",
# KikoEmbeddingAutocomplete removed - settings only, not a node
}
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
+1 -1
View File
@@ -20,7 +20,7 @@ class ComfyAssetsBaseNode:
- Consistent return type handling
"""
CATEGORY = "ComfyAssets"
CATEGORY = "🫶 ComfyAssets"
def validate_inputs(self, **kwargs) -> None:
"""
+1 -1
View File
@@ -38,7 +38,7 @@ class DisplayAnyNode(ComfyAssetsBaseNode):
return True
RETURN_TYPES = ("STRING",)
CATEGORY = "ComfyAssets/👁️ Display"
CATEGORY = "🫶 ComfyAssets/👁️ Display"
RETURN_NAMES = ("display_text",)
FUNCTION = "display"
OUTPUT_NODE = True # This node displays output in the UI
+1 -1
View File
@@ -19,7 +19,7 @@ class DisplayTextNode(ComfyAssetsBaseNode):
RETURN_NAMES = ("text",)
OUTPUT_NODE = True
FUNCTION = "display_text"
CATEGORY = "ComfyAssets/👁️ Display"
CATEGORY = "🫶 ComfyAssets/👁️ Display"
DESCRIPTION = """
Displays text in the UI with a copy-to-clipboard feature.
@@ -17,7 +17,7 @@ class KikoEmbeddingAutocomplete:
"""Node that provides embedding autocomplete functionality."""
DISPLAY_NAME = "🫶 Embedding Autocomplete Settings"
CATEGORY = "ComfyAssets"
CATEGORY = "🫶 ComfyAssets"
# Settings definition for the settings registry
SETTINGS = {
+1 -1
View File
@@ -96,7 +96,7 @@ class EmptyLatentBatchNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("LATENT", "INT", "INT")
RETURN_NAMES = ("latent", "width", "height")
FUNCTION = "create_empty_latent"
CATEGORY = "ComfyAssets/📦 Latents"
CATEGORY = "🫶 ComfyAssets/📦 Latents"
def create_empty_latent(
self, preset: str, width: int, height: int, batch_size: int
+1 -1
View File
@@ -51,7 +51,7 @@ class GeminiPromptNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("STRING", "STRING")
RETURN_NAMES = ("prompt", "negative_prompt")
FUNCTION = "generate_prompt"
CATEGORY = "ComfyAssets/🧠 Prompts"
CATEGORY = "🫶 ComfyAssets/🧠 Prompts"
DESCRIPTION = """
Analyzes images using Google's Gemini AI to generate optimized prompts.
+1 -1
View File
@@ -35,7 +35,7 @@ class ImageScaleDownByNode(ComfyAssetsBaseNode):
}
RETURN_TYPES = ("IMAGE",)
CATEGORY = "ComfyAssets/🖼️ Resolution"
CATEGORY = "🫶 ComfyAssets/🖼️ Resolution"
RETURN_NAMES = ("images",)
FUNCTION = "scale_down"
+1 -1
View File
@@ -36,7 +36,7 @@ class ImageToMultipleOfNode(ComfyAssetsBaseNode):
}
RETURN_TYPES = ("IMAGE",)
CATEGORY = "ComfyAssets/🖼️ Resolution"
CATEGORY = "🫶 ComfyAssets/🖼️ Resolution"
RETURN_NAMES = ("image",)
FUNCTION = "process"
+1 -1
View File
@@ -85,7 +85,7 @@ class KikoFilmGrainNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("IMAGE",)
RETURN_NAMES = ("image",)
FUNCTION = "apply_grain"
CATEGORY = "ComfyAssets/image"
CATEGORY = "🫶 ComfyAssets/💾 Images"
DESCRIPTION = "Apply realistic film grain effect with customizable parameters"
def apply_grain(
+1 -1
View File
@@ -95,7 +95,7 @@ class KikoSaveImageNode(ComfyAssetsBaseNode):
}
RETURN_TYPES = ()
CATEGORY = "ComfyAssets/💾 Images"
CATEGORY = "🫶 ComfyAssets/💾 Images"
FUNCTION = "save_images"
OUTPUT_NODE = True
@@ -60,7 +60,7 @@ class ResolutionCalculatorNode(ComfyAssetsBaseNode):
}
RETURN_TYPES = ("INT", "INT")
CATEGORY = "ComfyAssets/🖼️ Resolution"
CATEGORY = "🫶 ComfyAssets/🖼️ Resolution"
RETURN_NAMES = ("width", "height")
FUNCTION = "calculate_resolution"
@@ -63,7 +63,7 @@ class SamplerComboCompactNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("SAMPLER", SCHEDULERS, "INT", "FLOAT")
RETURN_NAMES = ("sampler", "scheduler", "steps", "cfg")
FUNCTION = "get_combo"
CATEGORY = "ComfyAssets/🌀 Samplers"
CATEGORY = "🫶 ComfyAssets/🌀 Samplers"
def get_combo(
self, sampler: str, sched: str, steps: int, cfg: float
+1 -1
View File
@@ -68,7 +68,7 @@ class SamplerComboNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("SAMPLER", SCHEDULERS, "INT", "FLOAT")
RETURN_NAMES = ("sampler_name", "scheduler", "steps", "cfg")
FUNCTION = "get_sampler_combo"
CATEGORY = "ComfyAssets/🌀 Samplers"
CATEGORY = "🫶 ComfyAssets/🌀 Samplers"
def get_sampler_combo(
self, sampler_name: str, scheduler: str, steps: int, cfg: float
+1 -1
View File
@@ -38,7 +38,7 @@ class SeedHistoryNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("INT",)
RETURN_NAMES = ("seed",)
FUNCTION = "output_seed"
CATEGORY = "ComfyAssets/🌱 Seeds"
CATEGORY = "🫶 ComfyAssets/🌱 Seeds"
def output_seed(self, seed: int) -> Tuple[int]:
"""
@@ -85,7 +85,7 @@ class WidthHeightSelectorNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("INT", "INT")
RETURN_NAMES = ("width", "height")
FUNCTION = "get_dimensions"
CATEGORY = "ComfyAssets/🖼️ Resolution"
CATEGORY = "🫶 ComfyAssets/🖼️ Resolution"
def get_dimensions(self, preset: str, width: int, height: int) -> Tuple[int, int]:
"""
@@ -125,7 +125,7 @@ class FluxSamplerParamsNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("LATENT", "SAMPLER_PARAMS")
RETURN_NAMES = ("latent", "params")
FUNCTION = "process_batch"
CATEGORY = "ComfyAssets/🧰 xyz-helpers"
CATEGORY = "🫶 ComfyAssets/🧰 xyz-helpers"
def process_batch(
self,
@@ -80,7 +80,7 @@ class LoRAFolderBatchNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("LORA_PARAMS", "STRING", "INT")
RETURN_NAMES = ("lora_params", "lora_list", "lora_count")
FUNCTION = "batch_loras"
CATEGORY = "ComfyAssets/🧰 xyz-helpers"
CATEGORY = "🫶 ComfyAssets/🧰 xyz-helpers"
def batch_loras(
self,
@@ -113,7 +113,7 @@ class PlotParametersNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("IMAGE",)
RETURN_NAMES = ("image",)
FUNCTION = "plot_parameters"
CATEGORY = "ComfyAssets/🧰 xyz-helpers"
CATEGORY = "🫶 ComfyAssets/🧰 xyz-helpers"
def plot_parameters(
self,
@@ -30,7 +30,7 @@ class SamplerSelectHelperNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("selected_samplers",)
FUNCTION = "select_samplers"
CATEGORY = "ComfyAssets/🧰 xyz-helpers"
CATEGORY = "🫶 ComfyAssets/🧰 xyz-helpers"
def select_samplers(self, **sampler_flags) -> Tuple[str]:
"""
@@ -30,7 +30,7 @@ class SchedulerSelectHelperNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("selected_schedulers",)
FUNCTION = "select_schedulers"
CATEGORY = "ComfyAssets/🧰 xyz-helpers"
CATEGORY = "🫶 ComfyAssets/🧰 xyz-helpers"
def select_schedulers(self, **scheduler_flags) -> Tuple[str]:
"""
@@ -40,7 +40,7 @@ class TextEncodeSamplerParamsNode(ComfyAssetsBaseNode):
RETURN_TYPES = ("CONDITIONING",)
RETURN_NAMES = ("conditioning",)
FUNCTION = "encode_prompts"
CATEGORY = "ComfyAssets/🧰 xyz-helpers"
CATEGORY = "🫶 ComfyAssets/🧰 xyz-helpers"
def encode_prompts(self, text: str, clip: Any) -> Tuple[Any]:
"""