diff --git a/__init__.py b/__init__.py index fe2cc8f..d7505cf 100644 --- a/__init__.py +++ b/__init__.py @@ -1,64 +1,103 @@ import os import sys +import importlib.util # Add the current directory to the path -sys.path.append(os.path.dirname(os.path.realpath(__file__))) +current_path = os.path.dirname(os.path.realpath(__file__)) +sys.path.append(current_path) + +# Initialize empty mappings +NODE_CLASS_MAPPINGS = {} +NODE_DISPLAY_NAME_MAPPINGS = {} try: - from core.prompt_generator import IsulionPromptGenerator - from core.ollama_generator import OllamaGenerate + # Import core modules + if importlib.util.find_spec("core.prompt_generator") is not None: + from core.prompt_generator import IsulionPromptGenerator + NODE_CLASS_MAPPINGS["IsulionPromptGenerator"] = IsulionPromptGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionPromptGenerator"] = "Isulion Prompt Generator ✨" - # Animal nodes - from nodes.animal.animal_selector import IsulionAnimalSelector - from nodes.animal.cute_animal_selector import IsulionCuteAnimalSelector - from nodes.animal.animal_behavior_generator import IsulionAnimalBehaviorGenerator + if importlib.util.find_spec("core.ollama_generator") is not None: + from core.ollama_generator import OllamaGenerate + NODE_CLASS_MAPPINGS["IsulionOllamaGenerate"] = OllamaGenerate + NODE_DISPLAY_NAME_MAPPINGS["IsulionOllamaGenerate"] = "Isulion Ollama Generate 🤖" - # Character nodes - from nodes.character.profession_generator import IsulionProfessionGenerator - from nodes.character.fantasy_race_generator import IsulionFantasyRaceGenerator - from nodes.character.clothing_generator import IsulionClothingGenerator + # Import character nodes + if importlib.util.find_spec("nodes.character.profession_generator") is not None: + from nodes.character.profession_generator import IsulionProfessionGenerator + NODE_CLASS_MAPPINGS["IsulionProfessionGenerator"] = IsulionProfessionGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionProfessionGenerator"] = "Isulion Character Profession 👨‍🍳" - # Environment nodes - from nodes.environment.habitat_generator import IsulionHabitatGenerator - from nodes.environment.weather_generator import IsulionWeatherGenerator - from nodes.environment.time_of_day_generator import IsulionTimeOfDayGenerator + if importlib.util.find_spec("nodes.character.fantasy_race_generator") is not None: + from nodes.character.fantasy_race_generator import IsulionFantasyRaceGenerator + NODE_CLASS_MAPPINGS["IsulionFantasyRaceGenerator"] = IsulionFantasyRaceGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionFantasyRaceGenerator"] = "Isulion Fantasy Race Generator 🧝‍♂️" - # Scene nodes - from nodes.scene.action_generator import IsulionActionGenerator - from nodes.scene.scene_composition import IsulionSceneComposition + if importlib.util.find_spec("nodes.character.clothing_generator") is not None: + from nodes.character.clothing_generator import IsulionClothingGenerator + NODE_CLASS_MAPPINGS["IsulionClothingGenerator"] = IsulionClothingGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionClothingGenerator"] = "Isulion Clothing Style Generator 👔" - # Style nodes - from nodes.style.art_style_generator import IsulionArtStyleGenerator - from nodes.style.emotion_generator import IsulionEmotionGenerator + # Import scene nodes + if importlib.util.find_spec("nodes.scene.action_generator") is not None: + from nodes.scene.action_generator import IsulionActionGenerator + NODE_CLASS_MAPPINGS["IsulionActionGenerator"] = IsulionActionGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionActionGenerator"] = "Isulion Action Generator ⚔️" - # Fantasy nodes - from nodes.fantasy.magical_effect_generator import IsulionMagicalEffectGenerator - from nodes.fantasy.mythical_location_generator import IsulionMythicalLocationGenerator - from nodes.fantasy.artifact_generator import IsulionArtifactGenerator + if importlib.util.find_spec("nodes.scene.scene_composition") is not None: + from nodes.scene.scene_composition import IsulionSceneComposition + NODE_CLASS_MAPPINGS["IsulionSceneComposition"] = IsulionSceneComposition + NODE_DISPLAY_NAME_MAPPINGS["IsulionSceneComposition"] = "Isulion Scene Composition 🎬" - # Sci-fi nodes - from nodes.scifi.tech_generator import IsulionTechGenerator - from nodes.scifi.alien_world_generator import IsulionAlienWorldGenerator - from nodes.scifi.spacecraft_generator import IsulionSpacecraftGenerator + # Import fantasy nodes + if importlib.util.find_spec("nodes.fantasy.magical_effect_generator") is not None: + from nodes.fantasy.magical_effect_generator import IsulionMagicalEffectGenerator + NODE_CLASS_MAPPINGS["IsulionMagicalEffectGenerator"] = IsulionMagicalEffectGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionMagicalEffectGenerator"] = "Isulion Magical Effect Generator ✨" - # Enhancement nodes - from nodes.enhancement.style_mixer import IsulionStyleMixer - from nodes.enhancement.prompt_enhancer import IsulionPromptEnhancer - from nodes.enhancement.negative_prompt_generator import IsulionNegativePromptGenerator + if importlib.util.find_spec("nodes.fantasy.mythical_location_generator") is not None: + from nodes.fantasy.mythical_location_generator import IsulionMythicalLocationGenerator + NODE_CLASS_MAPPINGS["IsulionMythicalLocationGenerator"] = IsulionMythicalLocationGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionMythicalLocationGenerator"] = "Isulion Mythical Location Generator 🏰" + + if importlib.util.find_spec("nodes.fantasy.artifact_generator") is not None: + from nodes.fantasy.artifact_generator import IsulionArtifactGenerator + NODE_CLASS_MAPPINGS["IsulionArtifactGenerator"] = IsulionArtifactGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionArtifactGenerator"] = "Isulion Artifact Generator 📿" + + # Import sci-fi nodes + if importlib.util.find_spec("nodes.scifi.tech_generator") is not None: + from nodes.scifi.tech_generator import IsulionTechGenerator + NODE_CLASS_MAPPINGS["IsulionTechGenerator"] = IsulionTechGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionTechGenerator"] = "Isulion Tech Generator 🤖" + + if importlib.util.find_spec("nodes.scifi.alien_world_generator") is not None: + from nodes.scifi.alien_world_generator import IsulionAlienWorldGenerator + NODE_CLASS_MAPPINGS["IsulionAlienWorldGenerator"] = IsulionAlienWorldGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionAlienWorldGenerator"] = "Isulion Alien World Generator 🪐" + + if importlib.util.find_spec("nodes.scifi.spacecraft_generator") is not None: + from nodes.scifi.spacecraft_generator import IsulionSpacecraftGenerator + NODE_CLASS_MAPPINGS["IsulionSpacecraftGenerator"] = IsulionSpacecraftGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionSpacecraftGenerator"] = "Isulion Spacecraft Designer 🚀" + + # Import enhancement nodes + if importlib.util.find_spec("nodes.enhancement.style_mixer") is not None: + from nodes.enhancement.style_mixer import IsulionStyleMixer + NODE_CLASS_MAPPINGS["IsulionStyleMixer"] = IsulionStyleMixer + NODE_DISPLAY_NAME_MAPPINGS["IsulionStyleMixer"] = "Isulion Style Mixer 🎨" + + if importlib.util.find_spec("nodes.enhancement.prompt_enhancer") is not None: + from nodes.enhancement.prompt_enhancer import IsulionPromptEnhancer + NODE_CLASS_MAPPINGS["IsulionPromptEnhancer"] = IsulionPromptEnhancer + NODE_DISPLAY_NAME_MAPPINGS["IsulionPromptEnhancer"] = "Isulion Prompt Enhancer 📝" + + if importlib.util.find_spec("nodes.enhancement.negative_prompt_generator") is not None: + from nodes.enhancement.negative_prompt_generator import IsulionNegativePromptGenerator + NODE_CLASS_MAPPINGS["IsulionNegativePromptGenerator"] = IsulionNegativePromptGenerator + NODE_DISPLAY_NAME_MAPPINGS["IsulionNegativePromptGenerator"] = "Isulion Negative Prompt Generator ⛔" except ImportError as e: print(f"Error importing Isulion nodes: {str(e)}") - -# Node mappings -NODE_CLASS_MAPPINGS = { - "IsulionPromptGenerator": IsulionPromptGenerator, - "IsulionOllamaGenerate": OllamaGenerate, - # ... rest of the mappings ... -} - -# Display name mappings -NODE_DISPLAY_NAME_MAPPINGS = { - "IsulionPromptGenerator": "Isulion Prompt Generator ✨", - "IsulionOllamaGenerate": "Isulion Ollama Generate 🤖", - # ... rest of the mappings ... -} +except Exception as e: + print(f"Error initializing Isulion nodes: {str(e)}") diff --git a/core/ollama_generator.py b/core/ollama_generator.py new file mode 100644 index 0000000..73bb2f9 --- /dev/null +++ b/core/ollama_generator.py @@ -0,0 +1,35 @@ +from ollama import Client + +class OllamaGenerate: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "prompt": ("STRING", { + "multiline": True, + "default": "What is Art?" + }), + "url": ("STRING", { + "multiline": False, + "default": "http://127.0.0.1:11434" + }), + "model": ((), {}), + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("response",) + FUNCTION = "ollama_generate" + CATEGORY = "Isulion/Core" + + def ollama_generate(self, prompt, url, model): + client = Client(host=url) + response = client.generate( + model=model, + prompt=prompt, + keep_alive="0m" + ) + return (response['response'],) \ No newline at end of file diff --git a/core/prompt_generator.py b/core/prompt_generator.py new file mode 100644 index 0000000..d5ca1af --- /dev/null +++ b/core/prompt_generator.py @@ -0,0 +1,27 @@ +import random + +class IsulionPromptGenerator: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "prompt": ("STRING", {"default": "", "multiline": True}), + }, + "optional": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + } + } + + RETURN_TYPES = ("STRING", "INT",) + RETURN_NAMES = ("prompt", "seed",) + FUNCTION = "generate" + CATEGORY = "Isulion/Core" + + def generate(self, prompt, seed=0): + if seed is not None and seed > 0: + random.seed(seed) + else: + seed = random.randint(0, 0xffffffffffffffff) + random.seed(seed) + + return (prompt, seed) \ No newline at end of file