StableDesign2 / mock_model.py
anbucur
Added functionality
4e4b650
raw
history blame
3.26 kB
from model import DesignModel
from PIL import Image
import numpy as np
import random
from typing import List
import traceback
class MockDesignModel(DesignModel):
def __init__(self):
super().__init__()
# Define base colors with proper alpha values
self.base_colors = [
(255, 0, 0), # Red
(0, 255, 0), # Green
(0, 0, 255), # Blue
(255, 255, 0), # Yellow
(255, 0, 255), # Magenta
(0, 255, 255), # Cyan
(128, 0, 0), # Maroon
(0, 128, 0), # Dark Green
(0, 0, 128), # Navy
]
# Add test-specific attributes
self.seed = 323*111
self.neg_prompt = "window, door, low resolution, banner, logo, watermark, text"
self.additional_quality_suffix = "interior design, 4K, high resolution"
def apply_tint(self, img_array: np.ndarray, color: tuple) -> np.ndarray:
"""Apply a color tint to an image array"""
# Create tint array
tint = np.array(color, dtype=np.float32) / 255.0
# Apply tint with alpha blending
alpha = 0.3 # 30% tint strength
tinted = img_array * (1 - alpha) + (img_array * tint) * alpha
# Ensure values are within valid range
return np.clip(tinted, 0, 255).astype(np.uint8)
def generate_design(self, image: Image.Image, num_variations: int = 1, **kwargs) -> List[np.ndarray]:
"""Generate multiple variations of the input image with different color tints"""
try:
print(f"Starting generation of {num_variations} variations")
# Convert image to numpy array once
img_array = np.array(image.convert('RGB'))
# Generate base colors for all variations
colors_needed = max(1, int(num_variations))
colors = []
# Add base colors first
colors.extend(self.base_colors)
# Generate additional random colors if needed
while len(colors) < colors_needed:
new_color = (
random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255)
)
if new_color not in colors:
colors.append(new_color)
# Use only the number of colors we need
selected_colors = random.sample(colors, colors_needed)
# Generate variations
variations = []
for i, color in enumerate(selected_colors):
# Apply tint to numpy array
tinted_array = self.apply_tint(img_array.copy(), color)
variations.append(tinted_array)
print(f"Created variation {i+1}/{colors_needed}")
print(f"Successfully generated {len(variations)} variations")
return variations
except Exception as e:
print(f"Error in generate_design: {e}")
traceback.print_exc()
# Return the original image array if there's an error
return [np.array(image.convert('RGB'))]