412 lines
22 KiB
Python
412 lines
22 KiB
Python
import random
|
|
import os
|
|
from typing import Dict, List, Tuple, Optional
|
|
from .configs.config_manager import ConfigManager
|
|
from .theme_handlers.base_handler import BaseThemeHandler
|
|
from .theme_handlers.anime_handler import AnimeThemeHandler
|
|
from .theme_handlers.abstract_handler import AbstractThemeHandler
|
|
from .theme_handlers.scifi_handler import SciFiThemeHandler
|
|
from .theme_handlers.pixar_handler import PixarThemeHandler
|
|
from .theme_handlers.fantasy_handler import FantasyThemeHandler
|
|
from .theme_handlers.cyberpunk_handler import CyberpunkThemeHandler
|
|
from .theme_handlers.ghibli_handler import GhibliThemeHandler
|
|
from .theme_handlers.horror_handler import HorrorThemeHandler
|
|
from .theme_handlers.steampunk_handler import SteampunkThemeHandler
|
|
from .theme_handlers.watercolor_handler import WatercolorThemeHandler
|
|
from .theme_handlers.logo_handler import LogoThemeHandler
|
|
from .theme_handlers.caricature_handler import CaricatureThemeHandler
|
|
from .theme_handlers.futuristic_city_handler import FuturisticCityThemeHandler
|
|
from .theme_handlers.halloween_handler import HalloweenThemeHandler
|
|
from .theme_handlers.instagram_handler import InstagramThemeHandler
|
|
from .theme_handlers.marvel_handler import MarvelThemeHandler
|
|
from .theme_handlers.microscopic_handler import MicroscopicThemeHandler
|
|
from .theme_handlers.minimalist_handler import MinimalistThemeHandler
|
|
from .theme_handlers.animation_cartoon_handler import AnimationCartoonThemeHandler
|
|
from .theme_handlers.architectural_handler import ArchitecturalThemeHandler
|
|
from .theme_handlers.bio_organic_tech_handler import BioOrganicTechThemeHandler
|
|
from .theme_handlers.binet_surreal_handler import BinetSurrealThemeHandler
|
|
from .theme_handlers.chimera_animals_handler import ChimeraAnimalsThemeHandler
|
|
from .theme_handlers.chimera_cute_animals_handler import ChimeraCuteAnimalsThemeHandler
|
|
from .theme_handlers.christmas_handler import ChristmasThemeHandler
|
|
from .theme_handlers.cinema_studio_handler import CinemaStudioThemeHandler
|
|
from .theme_handlers.clay_art_handler import ClayArtThemeHandler
|
|
from .theme_handlers.comic_book_handler import ComicBookThemeHandler
|
|
from .theme_handlers.concept_art_handler import ConceptArtThemeHandler
|
|
from .theme_handlers.crayon_art_handler import CrayonArtThemeHandler
|
|
from .theme_handlers.crystalpunk_handler import CrystalpunkThemeHandler
|
|
from .theme_handlers.culinary_food_handler import CulinaryFoodThemeHandler
|
|
from .theme_handlers.curvy_fashion_handler import CurvyFashionThemeHandler
|
|
from .theme_handlers.digital_art_handler import DigitalArtThemeHandler
|
|
from .theme_handlers.dimension_3d_handler import Dimension3DThemeHandler
|
|
from .theme_handlers.enchanted_fantasy_handler import EnchantedFantasyThemeHandler
|
|
from .theme_handlers.essential_realistic_handler import EssentialRealisticThemeHandler
|
|
from .theme_handlers.essential_vintage_handler import EssentialVintageThemeHandler
|
|
from .theme_handlers.ethereal_dreams_handler import EtherealDreamsThemeHandler
|
|
from .theme_handlers.experimental_art_handler import ExperimentalArtThemeHandler
|
|
from .theme_handlers.futuristic_battlefield_handler import FuturisticBattlefieldThemeHandler
|
|
from .theme_handlers.futuristic_city_metropolis_handler import FuturisticCityMetropolisThemeHandler
|
|
from .theme_handlers.futuristic_scifi_handler import FuturisticSciFiThemeHandler
|
|
from .theme_handlers.halloween_ethereal_handler import HalloweenEtherealThemeHandler
|
|
from .theme_handlers.impressionist_handler import ImpressionistThemeHandler
|
|
from .theme_handlers.instagram_lifestyle_handler import InstagramLifestyleThemeHandler
|
|
from .theme_handlers.manga_panel_handler import MangaPanelThemeHandler
|
|
from .theme_handlers.peaky_blinders_handler import PeakyBlindersThemeHandler
|
|
from .theme_handlers.post_apocalyptic_handler import PostApocalypticThemeHandler
|
|
from .theme_handlers.school_manga_handler import SchoolMangaThemeHandler
|
|
from .theme_handlers.star_wars_handler import StarWarsThemeHandler
|
|
from .theme_handlers.underwater_civilization_handler import UnderwaterCivilizationThemeHandler
|
|
from .theme_handlers.urban_tag_handler import UrbanTagThemeHandler
|
|
from .theme_handlers.village_world_handler import VillageWorldThemeHandler
|
|
from .theme_handlers.vintage_anthropomorphic_handler import VintageAnthropomorphicThemeHandler
|
|
from .theme_handlers.selfie_handler import SelfieThemeHandler
|
|
from .theme_handlers.street_food_kebab_handler import StreetFoodKebabThemeHandler
|
|
from .theme_handlers.puzzle_dimension_handler import PuzzleDimensionThemeHandler
|
|
from .theme_handlers.character_designer_handler import CharacterDesignerThemeHandler
|
|
from .theme_handlers.stopmotion_handler import StopMotionThemeHandler
|
|
from .theme_handlers.disney_handler import DisneyThemeHandler
|
|
from .theme_handlers.dreamworks_handler import DreamworksThemeHandler
|
|
from .theme_handlers.interior_spaces_handler import InteriorSpacesThemeHandler
|
|
from .theme_handlers.easter_handler import EasterThemeHandler
|
|
from .theme_handlers.valentines_day_handler import ValentinesDayThemeHandler
|
|
from .theme_handlers.new_years_eve_handler import NewYearsEveThemeHandler
|
|
from .theme_handlers.thanksgiving_handler import ThanksgivingThemeHandler
|
|
from .theme_handlers.st_patricks_day_handler import StPatricksDayThemeHandler
|
|
from .theme_handlers.dia_de_los_muertos_handler import DiaDeLosmuertosThemeHandler
|
|
from .theme_handlers.chinese_new_year_handler import ChineseNewYearThemeHandler
|
|
from .theme_handlers.fifties_commercial_handler import FiftiesCommercialHandler
|
|
|
|
class MegaPromptV3:
|
|
"""
|
|
Enhanced version of the Mega Prompt Generator with improved organization and features.
|
|
"""
|
|
|
|
def __init__(self):
|
|
# Initialize configuration manager
|
|
self.config_manager = ConfigManager()
|
|
|
|
# Initialize theme handlers
|
|
self._init_theme_handlers()
|
|
|
|
# Initialize theme mappings
|
|
self.theme_mappings = {
|
|
"🎲 Dynamic Random": "random",
|
|
"🎨 Abstract": "abstract",
|
|
"📺 Animation Cartoon": "animation_cartoon",
|
|
"🎌 Anime": "anime",
|
|
"🏛️ Architectural": "architectural",
|
|
"🧬 Bio-Organic Technology": "bio_organic_tech",
|
|
"🖼️ Binet Surreal": "binet_surreal",
|
|
"😄 Caricature": "caricature",
|
|
"🦄 Chimera Animals": "chimera_animals",
|
|
"🐰 Chimera Cute Animals": "chimera_cute_animals",
|
|
"🎄 Christmas": "christmas",
|
|
"🎬 Cinema Studio": "cinema_studio",
|
|
"🏺 Clay Art": "clay_art",
|
|
"🖌️ Crayon Art": "crayon_art",
|
|
"🍳 Culinary/Food": "culinary_food",
|
|
"👗 Curvy Fashion": "curvy_fashion",
|
|
"💠 Dimension 3D": "dimension_3d",
|
|
"🖼️ Digital Art": "digital_art",
|
|
"✨ Enchanted Fantasy": "enchanted_fantasy",
|
|
"📸 Essential Realistic": "essential_realistic",
|
|
"💥 Futuristic Battlefield": "futuristic_battlefield",
|
|
"🌆 Futuristic City Metropolis": "futuristic_city_metropolis",
|
|
"🚀 Futuristic Sci-Fi": "futuristic_scifi",
|
|
"🎨 Impressionist": "impressionist",
|
|
"👻 Halloween Ethereal": "halloween_ethereal",
|
|
"👻 Horror": "horror",
|
|
"🐰 Easter": "easter",
|
|
"💘 Valentine's Day": "valentines_day",
|
|
"🎆 New Year's Eve": "new_years_eve",
|
|
"🦃 Thanksgiving": "thanksgiving",
|
|
"🍀 St. Patrick's Day": "st_patricks_day",
|
|
"👹 Dia de los Muertos": "dia_de_los_muertos",
|
|
"🏮 Chinese New Year": "chinese_new_year",
|
|
"📺 Comic Book": "comic_book",
|
|
"👤 Character Designer": "character_designer",
|
|
"🎨 Concept Art": "concept_art",
|
|
"💎 Crystalpunk": "crystalpunk",
|
|
"🌆 Cyberpunk": "cyberpunk",
|
|
"🎡 Disney": "disney",
|
|
"🎬 Dreamworks": "dreamworks",
|
|
"✨ Ethereal Dreams": "ethereal_dreams",
|
|
"🔬 Experimental Art": "experimental_art",
|
|
"⚔️ Fantasy": "fantasy",
|
|
"🌃 Futuristic City": "futuristic_city",
|
|
"🍃 Ghibli": "ghibli",
|
|
"🎃 Halloween": "halloween",
|
|
"🏠 Interior Spaces": "interior_spaces",
|
|
"📱 Instagram": "instagram",
|
|
"📱 Instagram Lifestyle": "instagram_lifestyle",
|
|
"🎯 Logo": "logo",
|
|
"📺 Manga Panel": "manga_panel",
|
|
"🦸 Marvel": "marvel",
|
|
"🔬 Microscopic": "microscopic",
|
|
"⬜ Minimalist": "minimalist",
|
|
"🕴️♂️ Peaky Blinders": "peaky_blinders",
|
|
"💫 Pixar": "pixar",
|
|
"🌪️ Post Apocalyptic": "post_apocalyptic",
|
|
"🧩 Puzzle Dimension": "puzzle_dimension",
|
|
"🚀 Sci-Fi": "scifi",
|
|
"📚 School Manga": "school_manga",
|
|
"📱 Selfie": "selfie",
|
|
"🎭 Stop Motion": "stopmotion",
|
|
"🚀 Star Wars": "star_wars",
|
|
"⚙️ Steampunk": "steampunk",
|
|
"🥙 Street Food Kebab": "street_food_kebab",
|
|
"🌊 Underwater Civilization": "underwater_civilization",
|
|
"🏙️ Urban Tag": "urban_tag",
|
|
"🏠 Village World": "village_world",
|
|
"👴 Vintage Anthropomorphic": "vintage_anthropomorphic",
|
|
"🎨 Watercolor": "watercolor",
|
|
"🧺 50s Commercial": "fifties_commercial"
|
|
}
|
|
|
|
def _init_theme_handlers(self):
|
|
"""Initialize all theme handlers."""
|
|
self.handlers = {
|
|
"abstract": AbstractThemeHandler(self.config_manager),
|
|
"animation_cartoon": AnimationCartoonThemeHandler(self.config_manager),
|
|
"anime": AnimeThemeHandler(self.config_manager),
|
|
"architectural": ArchitecturalThemeHandler(self.config_manager),
|
|
"bio_organic_tech": BioOrganicTechThemeHandler(self.config_manager),
|
|
"binet_surreal": BinetSurrealThemeHandler(self.config_manager),
|
|
"caricature": CaricatureThemeHandler(self.config_manager),
|
|
"chimera_animals": ChimeraAnimalsThemeHandler(self.config_manager),
|
|
"chimera_cute_animals": ChimeraCuteAnimalsThemeHandler(self.config_manager),
|
|
"christmas": ChristmasThemeHandler(self.config_manager),
|
|
"cinema_studio": CinemaStudioThemeHandler(self.config_manager),
|
|
"clay_art": ClayArtThemeHandler(self.config_manager),
|
|
"comic_book": ComicBookThemeHandler(self.config_manager),
|
|
"character_designer": CharacterDesignerThemeHandler(self.config_manager),
|
|
"concept_art": ConceptArtThemeHandler(self.config_manager),
|
|
"crayon_art": CrayonArtThemeHandler(self.config_manager),
|
|
"crystalpunk": CrystalpunkThemeHandler(self.config_manager),
|
|
"cyberpunk": CyberpunkThemeHandler(self.config_manager),
|
|
"culinary_food": CulinaryFoodThemeHandler(self.config_manager),
|
|
"curvy_fashion": CurvyFashionThemeHandler(self.config_manager),
|
|
"digital_art": DigitalArtThemeHandler(self.config_manager),
|
|
"disney": DisneyThemeHandler(self.config_manager),
|
|
"dreamworks": DreamworksThemeHandler(self.config_manager),
|
|
"dimension_3d": Dimension3DThemeHandler(self.config_manager),
|
|
"enchanted_fantasy": EnchantedFantasyThemeHandler(self.config_manager),
|
|
"essential_realistic": EssentialRealisticThemeHandler(self.config_manager),
|
|
"essential_vintage": EssentialVintageThemeHandler(self.config_manager),
|
|
"fifties_commercial": FiftiesCommercialHandler(self.config_manager),
|
|
"ethereal_dreams": EtherealDreamsThemeHandler(self.config_manager),
|
|
"experimental_art": ExperimentalArtThemeHandler(self.config_manager),
|
|
"fantasy": FantasyThemeHandler(self.config_manager),
|
|
"futuristic_battlefield": FuturisticBattlefieldThemeHandler(self.config_manager),
|
|
"futuristic_city": FuturisticCityThemeHandler(self.config_manager),
|
|
"futuristic_city_metropolis": FuturisticCityMetropolisThemeHandler(self.config_manager),
|
|
"futuristic_scifi": FuturisticSciFiThemeHandler(self.config_manager),
|
|
"ghibli": GhibliThemeHandler(self.config_manager),
|
|
"halloween": HalloweenThemeHandler(self.config_manager),
|
|
"halloween_ethereal": HalloweenEtherealThemeHandler(self.config_manager),
|
|
"horror": HorrorThemeHandler(self.config_manager),
|
|
"impressionist": ImpressionistThemeHandler(self.config_manager),
|
|
"instagram": InstagramThemeHandler(self.config_manager),
|
|
"instagram_lifestyle": InstagramLifestyleThemeHandler(self.config_manager),
|
|
"interior_spaces": InteriorSpacesThemeHandler(self.config_manager),
|
|
"logo": LogoThemeHandler(self.config_manager),
|
|
"manga_panel": MangaPanelThemeHandler(self.config_manager),
|
|
"marvel": MarvelThemeHandler(self.config_manager),
|
|
"microscopic": MicroscopicThemeHandler(self.config_manager),
|
|
"minimalist": MinimalistThemeHandler(self.config_manager),
|
|
"peaky_blinders": PeakyBlindersThemeHandler(self.config_manager),
|
|
"pixar": PixarThemeHandler(self.config_manager),
|
|
"post_apocalyptic": PostApocalypticThemeHandler(self.config_manager),
|
|
"puzzle_dimension": PuzzleDimensionThemeHandler(self.config_manager),
|
|
"scifi": SciFiThemeHandler(self.config_manager),
|
|
"school_manga": SchoolMangaThemeHandler(self.config_manager),
|
|
"selfie": SelfieThemeHandler(self.config_manager),
|
|
"star_wars": StarWarsThemeHandler(self.config_manager),
|
|
"steampunk": SteampunkThemeHandler(self.config_manager),
|
|
"stopmotion": StopMotionThemeHandler(self.config_manager),
|
|
"underwater_civilization": UnderwaterCivilizationThemeHandler(self.config_manager),
|
|
"urban_tag": UrbanTagThemeHandler(self.config_manager),
|
|
"village_world": VillageWorldThemeHandler(self.config_manager),
|
|
"vintage_anthropomorphic": VintageAnthropomorphicThemeHandler(self.config_manager),
|
|
"watercolor": WatercolorThemeHandler(self.config_manager),
|
|
"street_food_kebab": StreetFoodKebabThemeHandler(self.config_manager),
|
|
"easter": EasterThemeHandler(self.config_manager),
|
|
"valentines_day": ValentinesDayThemeHandler(self.config_manager),
|
|
"new_years_eve": NewYearsEveThemeHandler(self.config_manager),
|
|
"thanksgiving": ThanksgivingThemeHandler(self.config_manager),
|
|
"st_patricks_day": StPatricksDayThemeHandler(self.config_manager),
|
|
"dia_de_los_muertos": DiaDeLosmuertosThemeHandler(self.config_manager),
|
|
"chinese_new_year": ChineseNewYearThemeHandler(self.config_manager)
|
|
}
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls) -> Dict:
|
|
"""Define input types for the node."""
|
|
return {
|
|
"required": {
|
|
"theme": ([
|
|
"🎲 Dynamic Random", # Keeps Random at top
|
|
"🎨 Abstract",
|
|
"📺 Animation Cartoon",
|
|
"🎌 Anime",
|
|
"🏛️ Architectural",
|
|
"🧬 Bio-Organic Technology",
|
|
"🖼️ Binet Surreal",
|
|
"😄 Caricature",
|
|
"🦄 Chimera Animals",
|
|
"🐰 Chimera Cute Animals",
|
|
"🎄 Christmas",
|
|
"🎬 Cinema Studio",
|
|
"🏺 Clay Art",
|
|
"📚 Comic Book",
|
|
"👤 Character Designer",
|
|
"🎨 Concept Art",
|
|
"🖍️ Crayon Art",
|
|
"💎 Crystalpunk",
|
|
"🌆 Cyberpunk",
|
|
"🍳 Culinary/Food",
|
|
"👗 Curvy Fashion",
|
|
"💻 Digital Art",
|
|
"🎡 Disney",
|
|
"🎬 Dreamworks",
|
|
"💠 Dimension 3D",
|
|
"✨ Enchanted Fantasy",
|
|
"📸 Essential Realistic",
|
|
"🕰️ Essential Vintage",
|
|
"💫 Ethereal Dreams",
|
|
"🔬 Experimental Art",
|
|
"⚔️ Fantasy",
|
|
"⚔️ Futuristic Battlefield",
|
|
"🌃 Futuristic City",
|
|
"🌆 Futuristic City Metropolis",
|
|
"🚀 Futuristic Sci-Fi",
|
|
"🍃 Ghibli",
|
|
"🎃 Halloween",
|
|
"👻 Halloween Ethereal",
|
|
"👻 Horror",
|
|
"🏠 Interior Spaces",
|
|
"🎨 Impressionist",
|
|
"📱 Instagram",
|
|
"📱 Instagram Lifestyle",
|
|
"🎯 Logo",
|
|
"📺 Manga Panel",
|
|
"🦸 Marvel",
|
|
"🔬 Microscopic",
|
|
"⬜ Minimalist",
|
|
"🕴️♂️ Peaky Blinders",
|
|
"💫 Pixar",
|
|
"🌪️ Post Apocalyptic",
|
|
"🧩 Puzzle Dimension",
|
|
"🚀 Sci-Fi",
|
|
"📚 School Manga",
|
|
"📱 Selfie",
|
|
"🎭 Stop Motion",
|
|
"🚀 Star Wars",
|
|
"⚙️ Steampunk",
|
|
"🥙 Street Food Kebab",
|
|
"🌊 Underwater Civilization",
|
|
"🏙️ Urban Tag",
|
|
"🏠 Village World",
|
|
"👴 Vintage Anthropomorphic",
|
|
"🎨 Watercolor",
|
|
"🐰 Easter",
|
|
"💘 Valentine's Day",
|
|
"🎆 New Year's Eve",
|
|
"🦃 Thanksgiving",
|
|
"🍀 St. Patrick's Day",
|
|
"👹 Dia de los Muertos",
|
|
"🏮 Chinese New Year",
|
|
"🧺 50s Commercial"
|
|
], {"default": "🎲 Dynamic Random"}),
|
|
"complexity": (["simple", "detailed", "complex"], {"default": "detailed"}),
|
|
"randomize": (["enable", "disable"], {"default": "enable"}),
|
|
"debug_mode": (["off", "on"], {"default": "off"}),
|
|
},
|
|
"optional": {
|
|
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
|
"custom_subject": ("STRING", {"default": "", "multiline": True}),
|
|
"custom_location": ("STRING", {"default": "", "multiline": True}),
|
|
"include_environment": (["yes", "no"], {"default": "yes"}),
|
|
"include_style": (["yes", "no"], {"default": "yes"}),
|
|
"include_effects": (["yes", "no"], {"default": "yes"}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING", "STRING", "STRING", "STRING", "INT")
|
|
RETURN_NAMES = ("prompt", "subject", "environment", "style", "effects", "seed")
|
|
FUNCTION = "generate"
|
|
CATEGORY = "Isulion/Core"
|
|
|
|
def generate(self, theme: str, complexity: str = "detailed", randomize: str = "enable",
|
|
seed: int = 0, custom_subject: str = "", custom_location: str = "",
|
|
include_environment: str = "yes", include_style: str = "yes",
|
|
include_effects: str = "yes", debug_mode: str = "off") -> Tuple[str, str, str, str, str, int]:
|
|
"""Generate a prompt based on the given parameters."""
|
|
try:
|
|
# Set seed if randomization is disabled
|
|
if randomize == "disable":
|
|
self.config_manager.set_seed(seed)
|
|
|
|
# Map theme to internal name
|
|
internal_theme = self.theme_mappings.get(theme, "random")
|
|
|
|
# Get appropriate handler
|
|
if internal_theme == "random":
|
|
# Exclude "random" from possible choices
|
|
available_themes = [k for k in self.handlers.keys() if k != "random"]
|
|
if not available_themes:
|
|
raise ValueError("No theme handlers available")
|
|
internal_theme = self.config_manager.random.choice(available_themes)
|
|
|
|
handler = self.handlers.get(internal_theme)
|
|
if not handler:
|
|
raise ValueError(f"No handler found for theme {internal_theme}")
|
|
|
|
# Set debug mode
|
|
handler.set_debug(debug_mode == "on")
|
|
|
|
# Generate components - no fallback needed as handlers should handle their own errors
|
|
components = handler.generate(
|
|
custom_subject=custom_subject,
|
|
custom_location=custom_location,
|
|
include_environment=include_environment,
|
|
include_style=include_style,
|
|
include_effects=include_effects
|
|
)
|
|
|
|
if not isinstance(components, dict):
|
|
raise ValueError(f"Handler {internal_theme} returned invalid components: {components}")
|
|
|
|
# Check for required components
|
|
if "subject" not in components:
|
|
raise ValueError(f"Handler {internal_theme} did not generate a subject")
|
|
|
|
# Build final prompt
|
|
prompt = ", ".join(filter(None, [
|
|
components.get("subject", ""),
|
|
components.get("environment", "") if include_environment == "yes" else "",
|
|
components.get("style", "") if include_style == "yes" else "",
|
|
components.get("effects", "") if include_effects == "yes" else ""
|
|
]))
|
|
|
|
return (
|
|
prompt,
|
|
components.get("subject", ""),
|
|
components.get("environment", ""),
|
|
components.get("style", ""),
|
|
components.get("effects", ""),
|
|
seed
|
|
)
|
|
|
|
except Exception as e:
|
|
error_msg = f"Error generating prompt: {str(e)}"
|
|
print(error_msg)
|
|
# Return error message in the prompt to make issues visible
|
|
return (
|
|
f"Error: {error_msg}",
|
|
"Error in subject generation",
|
|
"Error in environment generation",
|
|
"Error in style generation",
|
|
"Error in effect generation",
|
|
seed
|
|
)
|