using System.Collections.Generic;
using AIImages.Models;
using Verse;
namespace AIImages.Settings
{
///
/// Настройки мода AI Images
///
#pragma warning disable S1104 // Fields required for RimWorld's Scribe serialization system
public class AIImagesModSettings : ModSettings
{
// API настройки
public string apiEndpoint = "http://127.0.0.1:7860";
public string selectedModel = "";
public string selectedSampler = "Euler a";
public string selectedScheduler = "Automatic"; // С большой буквы для API
// Кэшированные списки из API (не сохраняются)
[Unsaved]
public List availableModels = new List();
[Unsaved]
public List availableSamplers = new List();
[Unsaved]
public List availableSchedulers = new List();
// Настройки генерации
public int steps = 30;
public float cfgScale = 7.5f;
public int width = 512;
public int height = 768;
public int seed = -1;
// Промпты
public string basePositivePrompt = "";
public string baseNegativePrompt =
"ugly, deformed, low quality, blurry, bad anatomy, worst quality";
// Художественный стиль (defName)
public string artStyleDefName = "ArtStyle_Realistic";
// Путь для сохранения
public string savePath = "AIImages/Generated";
// Флаги
public bool autoLoadModels = true;
public bool showTechnicalInfo = true;
public bool saveGenerationHistory = true;
public bool saveImagesToServer = false;
public bool enableDebugLogs = false;
public override void ExposeData()
{
Scribe_Values.Look(ref apiEndpoint, "apiEndpoint", "http://127.0.0.1:7860");
Scribe_Values.Look(ref selectedModel, "selectedModel", "");
Scribe_Values.Look(ref selectedSampler, "selectedSampler", "Euler a");
Scribe_Values.Look(ref selectedScheduler, "selectedScheduler", "Automatic");
Scribe_Values.Look(ref steps, "steps", 30);
Scribe_Values.Look(ref cfgScale, "cfgScale", 7.5f);
Scribe_Values.Look(ref width, "width", 512);
Scribe_Values.Look(ref height, "height", 768);
Scribe_Values.Look(ref seed, "seed", -1);
Scribe_Values.Look(ref basePositivePrompt, "basePositivePrompt", "");
Scribe_Values.Look(
ref baseNegativePrompt,
"baseNegativePrompt",
"ugly, deformed, low quality, blurry, bad anatomy, worst quality"
);
Scribe_Values.Look(ref artStyleDefName, "artStyleDefName", "ArtStyle_Realistic");
Scribe_Values.Look(ref savePath, "savePath", "AIImages/Generated");
Scribe_Values.Look(ref autoLoadModels, "autoLoadModels", true);
Scribe_Values.Look(ref showTechnicalInfo, "showTechnicalInfo", true);
Scribe_Values.Look(ref saveGenerationHistory, "saveGenerationHistory", true);
Scribe_Values.Look(ref saveImagesToServer, "saveImagesToServer", false);
Scribe_Values.Look(ref enableDebugLogs, "enableDebugLogs", false);
base.ExposeData();
}
///
/// Создает объект StableDiffusionSettings из настроек мода
///
public StableDiffusionSettings ToStableDiffusionSettings()
{
return new StableDiffusionSettings
{
Steps = steps,
CfgScale = cfgScale,
Width = width,
Height = height,
Sampler = selectedSampler,
Scheduler = selectedScheduler,
Seed = seed,
Model = selectedModel,
ArtStyleDefName = artStyleDefName,
PositivePrompt = basePositivePrompt,
NegativePrompt = baseNegativePrompt,
};
}
}
#pragma warning restore S1104
}