From ff5f679c4abd42f42949d9a6f482a658d5d756fd Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Sun, 26 Oct 2025 23:03:09 +0300 Subject: [PATCH] Enhance AIImages mod by adding support for positive and negative prompts, including UI updates for displaying and copying these prompts. Localized strings have been updated in English and Russian to reflect these changes. Update AIImages.dll to incorporate the latest modifications. --- Assemblies/AIImages.dll | Bin 84480 -> 85504 bytes Languages/English/Keyed/AIImages.xml | 4 + Languages/Russian/Keyed/AIImages.xml | 4 + Source/AIImages/Window_AIImage.cs | 112 +++++++++++++++++++++++---- 4 files changed, 103 insertions(+), 17 deletions(-) diff --git a/Assemblies/AIImages.dll b/Assemblies/AIImages.dll index cf9e1cb2fd9c9030e192bbd22f52f958c75665b9..6c02d360a47220315dd70c4c78f0ad1fbd358fef 100644 GIT binary patch delta 26998 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 KZ?zR=j{gryXltDS diff --git a/Languages/English/Keyed/AIImages.xml b/Languages/English/Keyed/AIImages.xml index a5af5b9..3c26cac 100644 --- a/Languages/English/Keyed/AIImages.xml +++ b/Languages/English/Keyed/AIImages.xml @@ -29,7 +29,11 @@ Color: {0} Stable Diffusion Prompt + Positive Prompt + Negative Prompt Copy Prompt + Copy Positive + Copy Negative Copied! Generate Image diff --git a/Languages/Russian/Keyed/AIImages.xml b/Languages/Russian/Keyed/AIImages.xml index c1f9852..41333ff 100644 --- a/Languages/Russian/Keyed/AIImages.xml +++ b/Languages/Russian/Keyed/AIImages.xml @@ -29,7 +29,11 @@ Цвет: {0} Промпт Stable Diffusion + Позитивный промпт + Негативный промпт Копировать промпт + Копировать позитивный + Копировать негативный Скопировано! Сгенерировать изображение diff --git a/Source/AIImages/Window_AIImage.cs b/Source/AIImages/Window_AIImage.cs index 2aaee78..0aca3d5 100644 --- a/Source/AIImages/Window_AIImage.cs +++ b/Source/AIImages/Window_AIImage.cs @@ -71,6 +71,7 @@ namespace AIImages private Vector2 scrollPosition = Vector2.zero; private Vector2 promptScrollPosition = Vector2.zero; + private Vector2 negativePromptScrollPosition = Vector2.zero; private float copiedMessageTime = 0f; /// @@ -445,58 +446,97 @@ namespace AIImages curY = DrawProgressBar(rect, curY); curY = DrawGenerationButton(rect, curY); - // Промпт секция + // Позитивный промпт секция Text.Font = GameFont.Medium; Widgets.Label( new Rect(rect.x, rect.y + curY, rect.width, 30f), - "AIImages.Prompt.SectionTitle".Translate() + "AIImages.Prompt.PositiveTitle".Translate() ); curY += 35f; - // Получаем промпт + // Получаем позитивный промпт Text.Font = GameFont.Tiny; - string promptText = promptGeneratorService.GeneratePositivePrompt( + string positivePrompt = promptGeneratorService.GeneratePositivePrompt( appearanceData, generationSettings ); // Фиксированная высота для области промпта - float promptBoxHeight = 150f; - float actualPromptHeight = Text.CalcHeight(promptText, rect.width - 20f); + float promptBoxHeight = 100f; + float actualPositiveHeight = Text.CalcHeight(positivePrompt, rect.width - 20f); - Rect promptOuterRect = new Rect(rect.x, rect.y + curY, rect.width, promptBoxHeight); - Rect promptViewRect = new Rect(0f, 0f, rect.width - 20f, actualPromptHeight); + Rect positiveOuterRect = new Rect(rect.x, rect.y + curY, rect.width, promptBoxHeight); + Rect positiveViewRect = new Rect(0f, 0f, rect.width - 20f, actualPositiveHeight); // Рисуем фон - Widgets.DrawBoxSolid(promptOuterRect, new Color(0.1f, 0.1f, 0.1f, 0.5f)); + Widgets.DrawBoxSolid(positiveOuterRect, new Color(0.1f, 0.3f, 0.1f, 0.5f)); // Рисуем промпт с прокруткой Widgets.BeginScrollView( - promptOuterRect.ContractedBy(5f), + positiveOuterRect.ContractedBy(5f), ref promptScrollPosition, - promptViewRect + positiveViewRect ); Widgets.Label( - new Rect(0f, 0f, promptViewRect.width, promptViewRect.height), - promptText + new Rect(0f, 0f, positiveViewRect.width, positiveViewRect.height), + positivePrompt ); Widgets.EndScrollView(); curY += promptBoxHeight + 10f; - // Кнопка копирования промпта + // Негативный промпт секция + Text.Font = GameFont.Medium; + Widgets.Label( + new Rect(rect.x, rect.y + curY, rect.width, 30f), + "AIImages.Prompt.NegativeTitle".Translate() + ); + curY += 35f; + + // Получаем негативный промпт + Text.Font = GameFont.Tiny; + string negativePrompt = promptGeneratorService.GenerateNegativePrompt( + generationSettings + ); + + float actualNegativeHeight = Text.CalcHeight(negativePrompt, rect.width - 20f); + + Rect negativeOuterRect = new Rect(rect.x, rect.y + curY, rect.width, promptBoxHeight); + Rect negativeViewRect = new Rect(0f, 0f, rect.width - 20f, actualNegativeHeight); + + // Рисуем фон (красноватый для негативного) + Widgets.DrawBoxSolid(negativeOuterRect, new Color(0.3f, 0.1f, 0.1f, 0.5f)); + + // Рисуем промпт с прокруткой + Widgets.BeginScrollView( + negativeOuterRect.ContractedBy(5f), + ref negativePromptScrollPosition, + negativeViewRect + ); + Widgets.Label( + new Rect(0f, 0f, negativeViewRect.width, negativeViewRect.height), + negativePrompt + ); + Widgets.EndScrollView(); + + curY += promptBoxHeight + 10f; + + // Кнопки копирования промптов if ( Widgets.ButtonText( new Rect(rect.x, rect.y + curY, rect.width / 2f - 5f, 30f), - "AIImages.Prompt.CopyButton".Translate() + "AIImages.Prompt.CopyPositive".Translate() ) ) { - GUIUtility.systemCopyBuffer = promptText; + string positiveForCopy = promptGeneratorService.GeneratePositivePrompt( + appearanceData, + generationSettings + ); + GUIUtility.systemCopyBuffer = positiveForCopy; copiedMessageTime = 2f; } - // Кнопка обновления данных if ( Widgets.ButtonText( new Rect( @@ -505,6 +545,22 @@ namespace AIImages rect.width / 2f - 5f, 30f ), + "AIImages.Prompt.CopyNegative".Translate() + ) + ) + { + string negativeForCopy = promptGeneratorService.GenerateNegativePrompt( + generationSettings + ); + GUIUtility.systemCopyBuffer = negativeForCopy; + copiedMessageTime = 2f; + } + curY += 35f; + + // Кнопка обновления данных + if ( + Widgets.ButtonText( + new Rect(rect.x, rect.y + curY, rect.width, 30f), "AIImages.Window.Refresh".Translate() ) ) @@ -556,6 +612,28 @@ namespace AIImages // Дополнительный отступ height += 50f; + // Позитивный промпт заголовок + height += 35f; + // Позитивный промпт контент + height += 100f + 10f; + + // Негативный промпт заголовок + height += 35f; + // Негативный промпт контент + height += 100f + 10f; + + // Кнопки копирования + height += 35f; + + // Кнопка обновления + height += 35f; + + // Сообщение о копировании + if (copiedMessageTime > 0f) + { + height += 30f; + } + return height; }