From 94bd490bfbb4e76716552502ea576ce34a95ea4b Mon Sep 17 00:00:00 2001
From: Svornost <11434-svornost@users.noreply.gitgud.io>
Date: Sat, 12 Aug 2023 20:59:08 -0400
Subject: [PATCH] AI art generation tweaks

---
 src/art/genAI/agePromptPart.js    |  4 +++-
 src/art/genAI/buildPrompt.js      |  4 +++-
 src/art/genAI/genderPromptPart.js | 31 +++++++++++++++++++++++++++++++
 src/art/genAI/pregPromptPart.js   | 21 +++++++++++++++++++++
 src/art/genAI/racePromptPart.js   |  5 +++++
 src/art/genAI/skinPromptPart.js   |  3 +++
 src/art/genAI/stableDiffusion.js  |  8 ++++----
 7 files changed, 70 insertions(+), 6 deletions(-)
 create mode 100644 src/art/genAI/genderPromptPart.js
 create mode 100644 src/art/genAI/pregPromptPart.js

diff --git a/src/art/genAI/agePromptPart.js b/src/art/genAI/agePromptPart.js
index 376ef513ac9..a955d11d495 100644
--- a/src/art/genAI/agePromptPart.js
+++ b/src/art/genAI/agePromptPart.js
@@ -4,7 +4,9 @@ App.Art.GenAI.AgePromptPart = class AgePromptPart extends App.Art.GenAI.PromptPa
 	 */
 	positive() {
 		let ageTags = ``;
-		if (this.slave.visualAge < 18) {
+		if (this.slave.visualAge < 13) {
+			ageTags = `child, `;
+		} else if (this.slave.visualAge < 18) {
 			ageTags = `teen, young, `;
 		} else if (this.slave.visualAge < 20) {
 			ageTags = `teen, `;
diff --git a/src/art/genAI/buildPrompt.js b/src/art/genAI/buildPrompt.js
index 77e5d7d3187..a1015ba089f 100644
--- a/src/art/genAI/buildPrompt.js
+++ b/src/art/genAI/buildPrompt.js
@@ -6,10 +6,12 @@
 function buildPrompt(slave) {
 	let prompts = [
 		new App.Art.GenAI.StylePromptPart(slave),
-		new App.Art.GenAI.BeautyPromptPart(slave),
 		new App.Art.GenAI.SkinPromptPart(slave),
 		new App.Art.GenAI.RacePromptPart(slave),
+		new App.Art.GenAI.GenderPromptPart(slave),
 		new App.Art.GenAI.AgePromptPart(slave),
+		new App.Art.GenAI.PregPromptPart(slave),
+		new App.Art.GenAI.BeautyPromptPart(slave),
 		new App.Art.GenAI.PosturePromptPart(slave),
 		new App.Art.GenAI.ArousalPromptPart(slave),
 		new App.Art.GenAI.WeightPromptPart(slave),
diff --git a/src/art/genAI/genderPromptPart.js b/src/art/genAI/genderPromptPart.js
new file mode 100644
index 00000000000..747fd028ea6
--- /dev/null
+++ b/src/art/genAI/genderPromptPart.js
@@ -0,0 +1,31 @@
+App.Art.GenAI.GenderPromptPart = class GenderPromptPart extends App.Art.GenAI.PromptPart {
+	/**
+	 * @returns {string}
+	 */
+	positive() {
+		if (this.slave.genes === "XX") {
+			if (this.slave.visualAge > 20) {
+				return "woman";
+			} else {
+				return "girl";
+			}
+		} else {
+			if (this.slave.visualAge > 20) {
+				return "man";
+			} else {
+				return "boy";
+			}
+		}
+	}
+
+	/**
+	 * @returns {string}
+	 */
+	negative() {
+		if (this.slave.genes === "XX") {
+			return "boy, man";
+		} else {
+			return "woman, girl";
+		}
+	}
+};
diff --git a/src/art/genAI/pregPromptPart.js b/src/art/genAI/pregPromptPart.js
new file mode 100644
index 00000000000..add8979ef1a
--- /dev/null
+++ b/src/art/genAI/pregPromptPart.js
@@ -0,0 +1,21 @@
+App.Art.GenAI.PregPromptPart = class PregPromptPart extends App.Art.GenAI.PromptPart {
+	/**
+	 * @returns {string}
+	 */
+	positive() {
+		if (this.slave.preg > 30) {
+			return "pregnant, full term";
+		} else if (this.slave.preg > 20) {
+			return "pregnant";
+		} else if (this.slave.preg > 10) {
+			return "baby bump";
+		}
+	}
+
+	/**
+	 * @returns {string}
+	 */
+	negative() {
+		return undefined;
+	}
+};
diff --git a/src/art/genAI/racePromptPart.js b/src/art/genAI/racePromptPart.js
index dda8562160f..5ff07196b4e 100644
--- a/src/art/genAI/racePromptPart.js
+++ b/src/art/genAI/racePromptPart.js
@@ -3,6 +3,11 @@ App.Art.GenAI.RacePromptPart = class RacePromptPart extends App.Art.GenAI.Prompt
 	 * @returns {string}
 	 */
 	positive() {
+		if (this.slave.race === "white") {
+			return "caucasian";
+		} else if (this.slave.race === "black") {
+			return "african";
+		}
 		return this.slave.race;
 	}
 
diff --git a/src/art/genAI/skinPromptPart.js b/src/art/genAI/skinPromptPart.js
index 8bedb7ed739..15ef9bd58c7 100644
--- a/src/art/genAI/skinPromptPart.js
+++ b/src/art/genAI/skinPromptPart.js
@@ -3,6 +3,9 @@ App.Art.GenAI.SkinPromptPart = class SkinPromptPart extends App.Art.GenAI.Prompt
 	 * @returns {string}
 	 */
 	positive() {
+		if (this.slave.geneticQuirks.albinism === 2) {
+			return "albino";
+		}
 		switch (this.slave.skin) {
 			case "pure white":
 			case "ivory":
diff --git a/src/art/genAI/stableDiffusion.js b/src/art/genAI/stableDiffusion.js
index 4d4bfcde4a1..20b23f23633 100644
--- a/src/art/genAI/stableDiffusion.js
+++ b/src/art/genAI/stableDiffusion.js
@@ -39,12 +39,12 @@ App.Art.GenAI.StableDiffusionSettings = class {
 	 */
 	constructor({
 		enable_hr = true,
-		denoising_strength = 0.6,
+		denoising_strength = 0.3,
 		firstphase_width = 400,
 		firstphase_height = 768,
 		hr_scale = 1.7,
-		hr_upscaler = "Latent",
-		hr_second_pass_steps = 12,
+		hr_upscaler = "SwinIR_4x",
+		hr_second_pass_steps = 10,
 		hr_resize_x = 0,
 		hr_resize_y = 0,
 		hr_sampler_name = "DPM++ 2M SDE Karras",
@@ -141,7 +141,7 @@ App.Art.GenAI.StableDiffusionClient = class {
 			body: JSON.stringify(settings),
 		};
 
-		const response = await fetchWithTimeout(`${this.apiUrl}/sdapi/v1/txt2img`, 30000, options);
+		const response = await fetchWithTimeout(`${this.apiUrl}/sdapi/v1/txt2img`, 60000, options);
 		if (!response.ok) {
 			console.error("Error fetching Stable Diffusion image", response);
 			throw new Error(`Error fetching Stable Diffusion image - status: ${response.status}`);
-- 
GitLab