86 lines
4.2 KiB
Python
86 lines
4.2 KiB
Python
from enum import Enum, auto
|
|
from typing import List, Dict
|
|
|
|
class PromptCategory(Enum):
|
|
"""Категории промптов"""
|
|
STYLE = auto()
|
|
LIGHTING = auto()
|
|
COMPOSITION = auto()
|
|
CAMERA = auto()
|
|
COLORS = auto()
|
|
MOOD = auto()
|
|
QUALITY = auto()
|
|
|
|
class PromptData:
|
|
"""Класс для хранения данных о промпте"""
|
|
def __init__(self, text: str, description: str = "", weight: float = 1.0):
|
|
self.text = text
|
|
self.description = description
|
|
self.weight = weight
|
|
|
|
class PromptCategories:
|
|
"""Класс для работы с категориями промптов"""
|
|
|
|
@staticmethod
|
|
def get_prompts() -> Dict[PromptCategory, List[PromptData]]:
|
|
"""Возвращает словарь с промптами по категориям"""
|
|
return {
|
|
PromptCategory.STYLE: [
|
|
PromptData("digital art", "Цифровое искусство"),
|
|
PromptData("oil painting", "Масляная живопись"),
|
|
PromptData("watercolor", "Акварель"),
|
|
PromptData("pencil sketch", "Карандашный набросок"),
|
|
PromptData("anime style", "Аниме стиль"),
|
|
PromptData("photorealistic", "Фотореалистичный"),
|
|
],
|
|
PromptCategory.LIGHTING: [
|
|
PromptData("soft lighting", "Мягкое освещение"),
|
|
PromptData("dramatic lighting", "Драматическое освещение"),
|
|
PromptData("cinematic lighting", "Кинематографическое освещение"),
|
|
PromptData("natural light", "Естественное освещение"),
|
|
PromptData("studio lighting", "Студийное освещение"),
|
|
],
|
|
PromptCategory.COMPOSITION: [
|
|
PromptData("rule of thirds", "Правило третей"),
|
|
PromptData("symmetrical", "Симметричная композиция"),
|
|
PromptData("centered composition", "Центральная композиция"),
|
|
PromptData("dynamic pose", "Динамичная поза"),
|
|
],
|
|
PromptCategory.CAMERA: [
|
|
PromptData("close-up shot", "Крупный план"),
|
|
PromptData("wide angle", "Широкий угол"),
|
|
PromptData("bokeh", "Боке"),
|
|
PromptData("depth of field", "Глубина резкости"),
|
|
],
|
|
PromptCategory.COLORS: [
|
|
PromptData("vibrant colors", "Яркие цвета"),
|
|
PromptData("pastel colors", "Пастельные цвета"),
|
|
PromptData("monochrome", "Монохром"),
|
|
PromptData("high contrast", "Высокий контраст"),
|
|
],
|
|
PromptCategory.MOOD: [
|
|
PromptData("peaceful", "Умиротворенное"),
|
|
PromptData("mysterious", "Таинственное"),
|
|
PromptData("energetic", "Энергичное"),
|
|
PromptData("melancholic", "Меланхоличное"),
|
|
],
|
|
PromptCategory.QUALITY: [
|
|
PromptData("highly detailed", "Высокая детализация"),
|
|
PromptData("8k uhd", "Высокое разрешение"),
|
|
PromptData("masterpiece", "Шедевр"),
|
|
PromptData("best quality", "Лучшее качество"),
|
|
],
|
|
}
|
|
|
|
@staticmethod
|
|
def get_category_name(category: PromptCategory) -> str:
|
|
"""Возвращает название категории на русском"""
|
|
return {
|
|
PromptCategory.STYLE: "Стили",
|
|
PromptCategory.LIGHTING: "Освещение",
|
|
PromptCategory.COMPOSITION: "Композиция",
|
|
PromptCategory.CAMERA: "Камера",
|
|
PromptCategory.COLORS: "Цвета",
|
|
PromptCategory.MOOD: "Настроение",
|
|
PromptCategory.QUALITY: "Качество",
|
|
}[category] |