diff --git a/src/art/artJS.js b/src/art/artJS.js
index 606a1166c30770cec6d7187c2b6d377119329d01..63c20dfde2f39a3ba44467322bf3b02b0d003ffa 100644
--- a/src/art/artJS.js
+++ b/src/art/artJS.js
@@ -547,7 +547,6 @@ App.Art.aiArtElement = function(slave, imageSize, isEventImage = null) {
 				const lightboxBackground = App.UI.DOM.appendNewElement('div', lightbox, null, ['lightbox-background']);
 				lightboxBackground.addEventListener('click', (ev) => {
 					if (ev.target === lightboxBackground) {
-						console.log('background clicked');
 						lightbox.remove();
 						document.removeEventListener('keydown', keys);
 					}
diff --git a/src/art/genAI/prompts/eyePromptPart.js b/src/art/genAI/prompts/eyePromptPart.js
index ae7243bf90ab803614d848c48e0f9ffdcdbfd4d9..8b11a72366e37792b14fccff1271fb3a183e0ed7 100644
--- a/src/art/genAI/prompts/eyePromptPart.js
+++ b/src/art/genAI/prompts/eyePromptPart.js
@@ -47,7 +47,7 @@ App.Art.GenAI.EyePromptPart = class EyePromptPart extends App.Art.GenAI.PromptPa
 		if (this.slave.eyewear === "corrective glasses" || this.slave.eyewear === "blurring glasses" || this.slave.eyewear === "glasses"){
 			positive.push(`glasses`);
 		}
-		return positive.join(`, `);
+		return positive.filter(p => !!p).join(`, `);
 	}
 
 	/**
diff --git a/src/art/genAI/reactiveImageDB.js b/src/art/genAI/reactiveImageDB.js
index 35ec8a4da2d8b089afabeb0441cbcfa916a02925..3a0509f4f67fd39fdf5078778e77efb701a19349 100644
--- a/src/art/genAI/reactiveImageDB.js
+++ b/src/art/genAI/reactiveImageDB.js
@@ -181,18 +181,28 @@ App.Art.GenAI.reactiveImageDB = (function() {
 			App.Art.GenAI.CustomPromptPart // player probably cares
 		];
 
+		let count = 0;
 		for (const DealBreaker of dealBreakers) {
 			const p1 = new DealBreaker(s1);
 			const p2 = new DealBreaker(s2);
 
-			// immediate disqualification
 			if (p1.positive() !== p2.positive()) {
-				return {
-					canReuse: false
-				};
+				// immediate disqualification
+				if (!s2.custom.aiAutoRegenExclude) {
+					return {
+						canReuse: false
+					};
+				} else {
+					count += 1;
+				}
 			}
 		}
 
+		// Count will only ever be larger 0 if slave.custom.aiAutoRegenExclude is active
+		if (count > 0) {
+			return {canReuse: true, difference: count * 10};
+		}
+
 		let differenceScore = 0;
 
 		// // Calculate and sum the "difference score" for each of these
@@ -256,8 +266,8 @@ App.Art.GenAI.reactiveImageDB = (function() {
 	/**
 	 * Fuzzily compares to see if all the slaves in an array are close enough to be used again
 	 *
-	 * @param {FC.SlaveState[]} slaveArr1
-	 * @param {FC.SlaveState[]} slaveArr2
+	 * @param {FC.SlaveState[]} slaveArr1 old slaves save in db
+	 * @param {FC.SlaveState[]} slaveArr2 current slaves
 	 *
 	 * @returns {{canReuse: boolean, averageDifference: number}} Comparison results
 	 */
@@ -306,7 +316,7 @@ App.Art.GenAI.reactiveImageDB = (function() {
 		const fuzzyResults = entries.map((entry) => {
 			return {
 				entry,
-				...fuzzyCompareSlavesArr(slaveStates, entry.slaveStates)
+				...fuzzyCompareSlavesArr(entry.slaveStates, slaveStates)
 			};
 		}).filter((record) => record.canReuse)
 			.reduce(( /** @type {ClosestEventRecord} */prevRecord, currentRecord) => {
@@ -375,9 +385,12 @@ App.Art.GenAI.reactiveImageDB = (function() {
 					const eventEntries = await db.getAllFromIndex(EVENT_STORE.path, EVENT_STORE.indicies.bySlaveIdsActions, IDBKeyRange.only([event.slaveIds, event.action]));
 
 					const {matches, averageDifference} = findClosestEvents(slaves, eventEntries, effectiveOptions);
-					const shouldUseCache = (averageDifference <= SIGNIFICANTLY_DIFFERENT_THRESHOLD) && !effectiveOptions.forceRegenerate;
-					const isExactMatch = averageDifference === 0;
-					const chosenEvent = matches[Math.floor(Math.random() * matches.length)];
+					// Use cache if an existing image is similar enough or all slaves are excluded from auto image gen
+					const shouldUseCache = (
+						averageDifference <= SIGNIFICANTLY_DIFFERENT_THRESHOLD ||
+						(slaves.reduce((acc, s) => acc && !!s.custom.aiAutoRegenExclude, true))
+
+					) && !effectiveOptions.forceRegenerate;
 
 					// Use the cached value
 					if (matches?.length > 0 && shouldUseCache) {
@@ -385,7 +398,8 @@ App.Art.GenAI.reactiveImageDB = (function() {
 						return matches[Math.floor(Math.random() * matches.length)];
 					}
 
-					const base64Image = await generateNewImage(slaves, effectiveOptions);
+					const isExactMatch = averageDifference === 0;
+					const chosenEvent = matches[Math.floor(Math.random() * matches.length)];
 
 					/** @type {App.Art.GenAI.EventStore.Entry} */
 					// @ts-expect-error
@@ -398,6 +412,8 @@ App.Art.GenAI.reactiveImageDB = (function() {
 						};
 					}
 
+					const base64Image = await generateNewImage(slaves, effectiveOptions);
+
 					if (event.action === 'overview') {
 						if (!base64Image) {
 							return undefined;
diff --git a/src/art/genAI/workflows.js b/src/art/genAI/workflows.js
index 718392c1bb9840acd2774ece7aaceefe10f02b3e..ea8d13557b1aa0a51ce6f84461b4fa53bad7b016 100644
--- a/src/art/genAI/workflows.js
+++ b/src/art/genAI/workflows.js
@@ -239,7 +239,7 @@ App.Art.GenAI.ComfyUIWorkflow = class {
 				promptWorkflow[30].inputs.positive = ["8", 0];
 			}
 			if (V.aiDynamicCfgEnabled) {
-				promptWorkflow[30].inputs.model[0] = "10";
+				promptWorkflow[30].inputs.model = ["10", 0];
 			}
 		}
 
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 0d2ee04554941a723dfff840feb57e1c2fec37a1..14d39fadb0c8273c77f520100ce1b0fbc5b31f37 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -4670,9 +4670,13 @@ App.RA.options = (function() {
 		}
 	}
 
-	class AiAutoRegen extends BooleanSwitch {
+	class AiAutoRegen extends RadioSelector {
 		constructor() {
-			super("Exclude slave from automatic image generation: ", [0, 1]);
+			const pairs = [
+				["Include", 0],
+				["Exclude", 1],
+			];
+			super("Automatic image generation", pairs);
 			this.setValue(current_rule.set.aiAutoRegenExclude);
 			this.onchange = (value) => current_rule.set.aiAutoRegenExclude = value;
 		}