diff --git a/public/scripts/extensions/stable-diffusion/index.js b/public/scripts/extensions/stable-diffusion/index.js
index 32f34ff40..ad2ad3941 100644
--- a/public/scripts/extensions/stable-diffusion/index.js
+++ b/public/scripts/extensions/stable-diffusion/index.js
@@ -1985,6 +1985,10 @@ async function loadNovelModels() {
}
return [
+ {
+ value: 'nai-diffusion-4-curated-preview',
+ text: 'NAI Diffusion Anime V4 (Curated Preview)',
+ },
{
value: 'nai-diffusion-3',
text: 'NAI Diffusion Anime V3',
@@ -2049,7 +2053,7 @@ async function loadSchedulers() {
schedulers = await getAutoRemoteSchedulers();
break;
case sources.novel:
- schedulers = ['N/A'];
+ schedulers = ['karras', 'native', 'exponential', 'polyexponential'];
break;
case sources.vlad:
schedulers = ['N/A'];
@@ -3158,6 +3162,7 @@ async function generateNovelImage(prompt, negativePrompt, signal) {
prompt: prompt,
model: extension_settings.sd.model,
sampler: extension_settings.sd.sampler,
+ scheduler: extension_settings.sd.scheduler,
steps: steps,
scale: extension_settings.sd.scale,
width: width,
diff --git a/public/scripts/extensions/stable-diffusion/settings.html b/public/scripts/extensions/stable-diffusion/settings.html
index 5736a23f6..a9e941ca0 100644
--- a/public/scripts/extensions/stable-diffusion/settings.html
+++ b/public/scripts/extensions/stable-diffusion/settings.html
@@ -274,7 +274,7 @@
-
+
diff --git a/src/endpoints/novelai.js b/src/endpoints/novelai.js
index 53ed8258e..9629aad40 100644
--- a/src/endpoints/novelai.js
+++ b/src/endpoints/novelai.js
@@ -307,15 +307,18 @@ router.post('/generate-image', jsonParser, async (request, response) => {
},
body: JSON.stringify({
action: 'generate',
- input: request.body.prompt,
+ input: request.body.prompt ?? '',
model: request.body.model ?? 'nai-diffusion',
parameters: {
+ params_version: 3,
+ prefer_brownian: true,
negative_prompt: request.body.negative_prompt ?? '',
height: request.body.height ?? 512,
width: request.body.width ?? 512,
scale: request.body.scale ?? 9,
seed: request.body.seed >= 0 ? request.body.seed : Math.floor(Math.random() * 9999999999),
sampler: request.body.sampler ?? 'k_dpmpp_2m',
+ noise_schedule: request.body.scheduler ?? 'karras',
steps: request.body.steps ?? 28,
n_samples: 1,
// NAI handholding for prompts
@@ -323,11 +326,32 @@ router.post('/generate-image', jsonParser, async (request, response) => {
qualityToggle: false,
add_original_image: false,
controlnet_strength: 1,
+ deliberate_euler_ancestral_bug: false,
dynamic_thresholding: request.body.decrisper ?? false,
legacy: false,
+ legacy_v3_extend: false,
sm: request.body.sm ?? false,
sm_dyn: request.body.sm_dyn ?? false,
uncond_scale: 1,
+ use_coords: false,
+ characterPrompts: [],
+ reference_image_multiple: [],
+ reference_information_extracted_multiple: [],
+ reference_strength_multiple: [],
+ v4_negative_prompt: {
+ caption: {
+ base_caption: request.body.negative_prompt ?? '',
+ char_captions: [],
+ },
+ },
+ v4_prompt: {
+ caption: {
+ base_caption: request.body.prompt ?? '',
+ char_captions: [],
+ },
+ use_coords: false,
+ use_order: true,
+ },
},
}),
});