diff --git a/devTools/types/FC/RA.d.ts b/devTools/types/FC/RA.d.ts index 8c7e433207dc6a5254eca195be14ce94dcad8fec..d4070eacddc4720a6d9f29a4b532270ca67ce01f 100644 --- a/devTools/types/FC/RA.d.ts +++ b/devTools/types/FC/RA.d.ts @@ -218,6 +218,8 @@ declare namespace FC { choosesOwnClothes: 0 | 1; pronoun: number; posePrompt: string; + expressionPositivePrompt: string; + expressionNegativePrompt: string; positivePrompt: string; negativePrompt: string; overridePrompts: boolean; diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js index dd3fcec25fe7610011213c5dc024aeff1f3c435a..fe073d4400b225877a12ec9dd377f027489e38e4 100644 --- a/src/js/DefaultRules.js +++ b/src/js/DefaultRules.js @@ -3318,6 +3318,22 @@ globalThis.DefaultRules = function(slave) { } } + // custom expression positive prompt + if (rule.expressionPositivePrompt != null && rule.expressionPositivePrompt !== '') { + if (slave.custom.aiPrompts.expressionPositive !== rule.expressionPositivePrompt) { + slave.custom.aiPrompts.expressionPositive = rule.expressionPositivePrompt; + message(`${slave.slaveName} has had ${his} positive expression prompt set.`, sourceRecord.expressionPositivePromptPrompt); + } + } + + // custom expression negative prompt + if (rule.expressionNegativePrompt != null && rule.expressionNegativePrompt !== '') { + if (slave.custom.aiPrompts.expressionNegative !== rule.expressionNegativePrompt) { + slave.custom.aiPrompts.expressionNegative = rule.expressionNegativePrompt; + message(`${slave.slaveName} has had ${his} negative expression prompt set.`, sourceRecord.expressionNegativePromptPrompt); + } + } + // custom positive prompts if (rule.positivePrompt != null && rule.positivePrompt !== '') { assignPrompts("positive"); diff --git a/src/js/rulesAssistant.js b/src/js/rulesAssistant.js index 99b90cde54d071330861c3cdf0307fbf5aaab602..30a93a68ced1ae54ffdf2950855a80bfe34fec80 100644 --- a/src/js/rulesAssistant.js +++ b/src/js/rulesAssistant.js @@ -301,6 +301,8 @@ App.RA.newRule = function() { labelTagsClear: null, pronoun: null, posePrompt: null, + expressionPositivePrompt: null, + expressionNegativePrompt: null, positivePrompt: null, negativePrompt: null, overridePrompts: null, diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index f000b6149fb35a2c9dc6c28e2d2df6122cc8aa83..9f0f3b993b7aadd56a3d547df8714a319bf20c74 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -1560,6 +1560,8 @@ App.RA.options = (function() { } if (V.imageChoice === 6) { // If using AI generated images this.appendChild(new OverridePosePrompt()); + this.appendChild(new OverrideExpressionPositivePrompt()); + this.appendChild(new OverrideExpressionNegativePrompt()); this.appendChild(new OverridePromptSwitch()); this.appendChild(new AddCustomPosPrompt()); this.appendChild(new AddCustomNegPrompt()); @@ -4236,6 +4238,22 @@ App.RA.options = (function() { } } + class OverrideExpressionPositivePrompt extends StringEditor { + constructor() { + super("Override positive expression prompt", [], true, false); + this.setValue(current_rule.set.expressionPositivePrompt); + this.onchange = (value) => current_rule.set.expressionPositivePrompt = value; + } + } + + class OverrideExpressionNegativePrompt extends StringEditor { + constructor() { + super("Override negative expression prompt", [], true, false); + this.setValue(current_rule.set.expressionNegativePrompt); + this.onchange = (value) => current_rule.set.expressionNegativePrompt = value; + } + } + class AddCustomPosPrompt extends StringEditor { constructor() { super("Add custom positive prompt(s) to slave", [], true, false);