Перейти к содержанию

Prompt Transformer

Оптимизация и трансформация промптов для разных AI-моделей.

Возможности

  • Расширение коротких промптов
  • Оптимизация для конкретных моделей
  • Стилизация (cinematic, anime, etc.)
  • Перевод промптов
  • Negative prompts

Использование

Базовое использование

from kit.services import PromptTransformer

transformer = PromptTransformer()

# Расширение промпта
result = await transformer.expand(
    prompt="закат над морем",
    style="cinematic"
)

print(result.expanded)
# "Breathtaking cinematic sunset over the ocean, golden hour lighting,
#  dramatic clouds, sun rays piercing through, calm waves, 8K, ultra detailed"

print(result.negative)
# "blurry, low quality, oversaturated, cartoon, anime"

Оптимизация для моделей

# Для Stable Diffusion
sd_prompt = await transformer.optimize(
    prompt="портрет девушки",
    target="stable_diffusion"
)

# Для Midjourney
mj_prompt = await transformer.optimize(
    prompt="портрет девушки",
    target="midjourney"
)

# Для видео генерации
video_prompt = await transformer.optimize(
    prompt="машина едет по дороге",
    target="video_generation"
)

Стили

styles = [
    "cinematic",
    "anime",
    "photorealistic",
    "oil_painting",
    "watercolor",
    "3d_render",
    "pixel_art",
    "sketch"
]

result = await transformer.expand(
    prompt="forest landscape",
    style="anime"
)
# "Anime style forest landscape, vibrant colors, Studio Ghibli inspired,
#  detailed foliage, magical atmosphere, soft lighting"

Перевод промптов

# Авто-перевод русского в английский
result = await transformer.process(
    prompt="красивая девушка в парке осенью",
    translate=True
)

print(result.original)   # "красивая девушка в парке осенью"
print(result.translated) # "beautiful girl in autumn park"
print(result.expanded)   # "Beautiful young woman in autumn park..."

Pipeline трансформаций

result = await transformer.pipeline(
    prompt="кот",
    steps=[
        ("translate", {}),
        ("expand", {"style": "photorealistic"}),
        ("optimize", {"target": "stable_diffusion"}),
        ("add_quality", {"level": "high"})
    ]
)

Кастомные правила

transformer = PromptTransformer(
    rules={
        "always_add": ["high quality", "detailed"],
        "never_include": ["nsfw", "violent"],
        "style_mappings": {
            "кинематографичный": "cinematic",
            "аниме": "anime style"
        }
    }
)

API Reference

PromptTransformer

class PromptTransformer:
    def __init__(
        self,
        llm: BaseLLMProvider = None,  # Для expand/optimize
        rules: dict = None
    )

    async def expand(
        self,
        prompt: str,
        style: str = None,
        max_length: int = 200
    ) -> TransformResult

    async def optimize(
        self,
        prompt: str,
        target: str  # "stable_diffusion", "midjourney", "video_generation"
    ) -> TransformResult

    async def translate(
        self,
        prompt: str,
        source_lang: str = "auto",
        target_lang: str = "en"
    ) -> str

    async def process(
        self,
        prompt: str,
        translate: bool = False,
        expand: bool = True,
        style: str = None,
        target: str = None
    ) -> TransformResult

    async def pipeline(
        self,
        prompt: str,
        steps: List[Tuple[str, dict]]
    ) -> TransformResult

    def add_negative(
        self,
        prompt: str,
        style: str = None
    ) -> str

TransformResult

@dataclass
class TransformResult:
    original: str
    expanded: str
    negative: str = ""
    translated: str = None
    metadata: dict = None

Примеры из production

Autoshorts — генерация промптов для сцен

class ScenePromptGenerator:
    def __init__(self):
        self.transformer = PromptTransformer()

    async def generate_visual_prompts(
        self,
        script: List[dict],
        style: str = "cinematic"
    ) -> List[str]:
        """Генерация визуальных промптов для каждой сцены."""
        prompts = []

        for scene in script:
            result = await self.transformer.process(
                prompt=scene["visual_description"],
                translate=True,
                expand=True,
                style=style,
                target="video_generation"
            )

            prompts.append({
                "scene_id": scene["id"],
                "prompt": result.expanded,
                "negative": result.negative
            })

        return prompts

    async def style_consistency(
        self,
        prompts: List[str],
        style: str
    ) -> List[str]:
        """Обеспечение визуальной согласованности."""
        style_suffix = self.transformer.get_style_suffix(style)

        return [
            f"{prompt}, {style_suffix}, consistent style, same aesthetic"
            for prompt in prompts
        ]

Image Generation Service

class ImageService:
    def __init__(self):
        self.transformer = PromptTransformer()
        self.image_provider = StableDiffusionProvider()

    async def generate(
        self,
        user_prompt: str,
        style: str = "photorealistic"
    ) -> str:
        # Трансформация промпта
        result = await self.transformer.process(
            prompt=user_prompt,
            translate=True,
            expand=True,
            style=style,
            target="stable_diffusion"
        )

        # Генерация изображения
        image = await self.image_provider.generate(
            prompt=result.expanded,
            negative_prompt=result.negative
        )

        return image.url

Batch промпты

class BatchPromptProcessor:
    def __init__(self):
        self.transformer = PromptTransformer()

    async def process_batch(
        self,
        prompts: List[str],
        style: str
    ) -> List[TransformResult]:
        """Параллельная обработка множества промптов."""
        tasks = [
            self.transformer.process(
                prompt=p,
                translate=True,
                style=style
            )
            for p in prompts
        ]

        return await asyncio.gather(*tasks)