Peaky blinders fixes

This commit is contained in:
Isulion
2024-11-26 21:24:16 +01:00
parent 5a4bf14141
commit 6c3411dab6
2 changed files with 173 additions and 72 deletions
+20 -9
View File
@@ -315,15 +315,26 @@ class MegaPromptV3:
)
except Exception as e:
print(f"Error generating components with {internal_theme} handler: {str(e)}")
# Fallback to abstract handler
handler = AbstractThemeHandler(self.config_manager)
components = handler.generate(
custom_subject=custom_subject,
custom_location=custom_location,
include_environment=include_environment,
include_style=include_style,
include_effects=include_effects
)
# Only fallback to abstract for themes that should be abstract
if internal_theme not in ["peaky_blinders", "essential_realistic", "essential_vintage", "cinema_studio"]:
print("Falling back to abstract handler")
handler = AbstractThemeHandler(self.config_manager)
components = handler.generate(
custom_subject=custom_subject,
custom_location=custom_location,
include_environment=include_environment,
include_style=include_style,
include_effects=include_effects
)
else:
# For realistic themes, provide a safe fallback that maintains theme
print(f"Using safe fallback for {internal_theme}")
components = {
"subject": f"((a detailed {internal_theme.replace('_', ' ')} style portrait))",
"environment": "in a thematically appropriate setting",
"style": "with professional quality and theme-specific details",
"effects": "with refined details and appropriate effects"
}
# Ensure all components exist
default_components = {
+153 -63
View File
@@ -6,8 +6,36 @@ class PeakyBlindersThemeHandler(BaseThemeHandler):
def get_negative_prompt(self) -> str:
"""Get negative prompt to avoid modern elements."""
negative_elements = self._get_random_choices("peaky_blinders.negative_prompts", 8)
return ", ".join(negative_elements) + ", modern background, contemporary setting, current era architecture"
try:
negative_elements = self._get_random_choices("peaky_blinders.negative_prompts", 8)
return ", ".join(negative_elements) + ", modern background, contemporary setting, current era architecture"
except Exception as e:
print(f"Warning: Error getting negative prompts: {str(e)}")
return "modern elements, contemporary setting, current era architecture"
def _enforce_1920s_theme(self, custom_text: str) -> str:
"""Ensure the custom text maintains 1920s theme."""
if not custom_text:
return ""
if any(modern_term in custom_text.lower() for modern_term in ['computer', 'phone', 'digital', 'modern', 'future']):
return f"((historical 1920s character inspired by {custom_text}))"
return f"((1920s version of {custom_text}))"
def _get_safe_random_choice(self, config_key: str, default: str) -> str:
"""Safely get a random choice with fallback."""
try:
return self._get_random_choice(config_key)
except Exception as e:
print(f"Warning: Error getting choice for {config_key}: {str(e)}")
return default
def _get_safe_random_choices(self, config_key: str, count: int, defaults: list) -> list:
"""Safely get multiple random choices with fallback."""
try:
return self._get_random_choices(config_key, count)
except Exception as e:
print(f"Warning: Error getting choices for {config_key}: {str(e)}")
return defaults[:count]
def generate(self, custom_subject: str = "",
custom_location: str = "",
@@ -17,69 +45,131 @@ class PeakyBlindersThemeHandler(BaseThemeHandler):
"""Generate historically accurate 1920s Peaky Blinders-themed components."""
components = {}
# Get custom inputs
custom_subject = custom_subject.strip()
custom_location = custom_location.strip()
# Select core elements
character = self._get_random_choice("peaky_blinders.characters")
clothing = self._get_random_choices("peaky_blinders.clothing", 2)
props = self._get_random_choices("peaky_blinders.period_props", 2)
color_scheme = self._get_random_choice("peaky_blinders.color_schemes")
period_elements = self._get_random_choices("peaky_blinders.period_elements", 3)
if custom_subject:
components["subject"] = (
f"((1920s historical portrait)) of {custom_subject}, "
f"((wearing {', '.join(clothing)})), ((with {', '.join(props)})), "
f"((strictly period accurate details)), ((1920s Birmingham style)), "
f"in tones of {color_scheme}, ((historical accuracy)), ((1920s era))"
try:
# Get custom inputs and enforce 1920s theme
custom_subject = self._enforce_1920s_theme(custom_subject.strip())
custom_location = custom_location.strip()
# Select core elements with safe fallbacks
character = self._get_safe_random_choice(
"peaky_blinders.characters",
"gangster"
)
else:
components["subject"] = (
f"((1920s historical portrait)) of a ((Birmingham {character})), "
f"((wearing {', '.join(clothing)})), ((with {', '.join(props)})), "
f"((strictly period accurate details)), ((1920s Birmingham style)), "
f"in tones of {color_scheme}, ((historical accuracy)), ((1920s era))"
clothing = self._get_safe_random_choices(
"peaky_blinders.clothing",
2,
["period appropriate clothing", "1920s attire"]
)
if include_environment == "yes":
if custom_location:
lighting = self._get_random_choice("peaky_blinders.lighting")
components["environment"] = (
f"in ((1920s {custom_location})), ((with {', '.join(period_elements)})), "
f"((illuminated by {lighting})), ((authentic historical setting)), "
f"((1920s industrial atmosphere)), ((Victorian era architecture)), "
f"((no modern elements)), ((period accurate Birmingham))"
props = self._get_safe_random_choices(
"peaky_blinders.period_props",
2,
["pocket watch", "leather gloves"]
)
color_scheme = self._get_safe_random_choice(
"peaky_blinders.color_schemes",
"industrial tones"
)
period_elements = self._get_safe_random_choices(
"peaky_blinders.period_elements",
3,
["gas lamps", "cobblestone streets", "brick buildings"]
)
# Generate subject component
if custom_subject:
components["subject"] = (
f"{custom_subject}, "
f"((dressed in 1920s attire)), ((wearing {', '.join(clothing)})), "
f"((with {', '.join(props)})), ((in 1920s Birmingham setting)), "
f"((strictly period accurate details)), ((1920s style)), "
f"in tones of {color_scheme}, ((historical accuracy)), ((1920s era))"
)
else:
setting = self._get_random_choice("peaky_blinders.period_settings")
lighting = self._get_random_choice("peaky_blinders.lighting")
components["environment"] = (
f"in ((a {setting})), ((with {', '.join(period_elements)})), "
f"((illuminated by {lighting})), ((authentic historical setting)), "
f"((1920s industrial atmosphere)), ((Victorian era architecture)), "
f"((no modern elements)), ((period accurate Birmingham))"
components["subject"] = (
f"((1920s historical portrait)) of a ((Birmingham {character})), "
f"((wearing {', '.join(clothing)})), ((with {', '.join(props)})), "
f"((strictly period accurate details)), ((1920s Birmingham style)), "
f"in tones of {color_scheme}, ((historical accuracy)), ((1920s era))"
)
if include_style == "yes":
style = self._get_random_choice("peaky_blinders.period_styles")
mood = self._get_random_choice("peaky_blinders.mood")
components["style"] = (
f"((authentic {style})), ((historical photography)), "
f"((strictly period accurate details)), (({mood} atmosphere)), "
f"((1920s documentary aesthetic)), ((vintage photo quality)), "
f"((historical drama)), ((period appropriate film grain)), "
f"((Victorian industrial era)), 8k resolution, ((masterful composition))"
)
if include_effects == "yes":
components["effects"] = (
f"with ((1920s photo effects)), ((period appropriate film grain)), "
f"((historical color grading)), ((authentic aging)), "
f"((early photography style)), ((industrial atmosphere)), "
f"((coal smoke ambiance)), ((historical authenticity)), "
f"((no modern post-processing))"
)
return components
# Generate environment component
if include_environment == "yes":
if custom_location:
lighting = self._get_safe_random_choice(
"peaky_blinders.lighting",
"period lighting"
)
components["environment"] = (
f"in ((1920s {custom_location})), ((with {', '.join(period_elements)})), "
f"((illuminated by {lighting})), ((authentic historical setting)), "
f"((1920s industrial atmosphere)), ((Victorian era architecture)), "
f"((no modern elements)), ((period accurate Birmingham))"
)
else:
setting = self._get_safe_random_choice(
"peaky_blinders.period_settings",
"industrial street"
)
lighting = self._get_safe_random_choice(
"peaky_blinders.lighting",
"period lighting"
)
components["environment"] = (
f"in ((a {setting})), ((with {', '.join(period_elements)})), "
f"((illuminated by {lighting})), ((authentic historical setting)), "
f"((1920s industrial atmosphere)), ((Victorian era architecture)), "
f"((no modern elements)), ((period accurate Birmingham))"
)
# Generate style component
if include_style == "yes":
style = self._get_safe_random_choice(
"peaky_blinders.period_styles",
"1920s period"
)
mood = self._get_safe_random_choice(
"peaky_blinders.mood",
"industrial era"
)
components["style"] = (
f"((authentic {style})), ((1920s photography)), "
f"((strictly period accurate details)), (({mood} atmosphere)), "
f"((1920s documentary aesthetic)), ((vintage photo quality)), "
f"((historical drama)), ((period appropriate film grain)), "
f"((Victorian industrial era)), ((1920s Birmingham)), 8k resolution"
)
# Generate effects component
if include_effects == "yes":
components["effects"] = (
f"with ((1920s photo effects)), ((period appropriate film grain)), "
f"((historical color grading)), ((authentic aging)), "
f"((early photography style)), ((industrial atmosphere)), "
f"((coal smoke ambiance)), ((historical authenticity)), "
f"((no modern post-processing)), ((1920s photographic technique))"
)
return components
except Exception as e:
print(f"Warning: Error in Peaky Blinders handler: {str(e)}")
# Return safe fallback components that maintain theme instead of going to abstract
return {
"subject": (
f"((1920s historical portrait)) of a ((Birmingham character)), "
f"((wearing period appropriate clothing)), ((with period props)), "
f"((strictly period accurate details)), ((1920s Birmingham style))"
),
"environment": (
f"in ((a 1920s industrial setting)), ((with period elements)), "
f"((authentic historical setting)), ((Victorian era architecture))"
),
"style": (
f"((1920s photography)), ((historical accuracy)), "
f"((vintage photo quality)), ((period appropriate film grain))"
),
"effects": (
f"with ((1920s photo effects)), ((historical color grading)), "
f"((authentic aging)), ((period appropriate details))"
)
}