Add NAI Diffusion V4
| @@ -1986,6 +1986,10 @@ async function loadNovelModels() { | ||
| 1986 | 1986 | |
| 1987 | 1987 | return [ |
| 1988 | 1988 | { |
| 1989 | + value: 'nai-diffusion-4-curated-preview', | |
| 1990 | + text: 'NAI Diffusion Anime V4 (Curated Preview)', | |
| 1991 | + }, | |
| 1992 | + { | |
| 1989 | 1993 | value: 'nai-diffusion-3', |
| 1990 | 1994 | text: 'NAI Diffusion Anime V3', |
| 1991 | 1995 | }, |
| @@ -2049,7 +2053,7 @@ async function loadSchedulers() { | ||
| 2049 | 2053 | schedulers = await getAutoRemoteSchedulers(); |
| 2050 | 2054 | break; |
| 2051 | 2055 | case sources.novel: |
| 2052 | 2056 | schedulers = ['N/Akarras', 'native', 'exponential', 'polyexponential']; |
| 2053 | 2057 | break; |
| 2054 | 2058 | case sources.vlad: |
| 2055 | 2059 | schedulers = ['N/A']; |
| @@ -3158,6 +3162,7 @@ async function generateNovelImage(prompt, negativePrompt, signal) { | ||
| 3158 | 3162 | prompt: prompt, |
| 3159 | 3163 | model: extension_settings.sd.model, |
| 3160 | 3164 | sampler: extension_settings.sd.sampler, |
| 3165 | + scheduler: extension_settings.sd.scheduler, | |
| 3161 | 3166 | steps: steps, |
| 3162 | 3167 | scale: extension_settings.sd.scale, |
| 3163 | 3168 | width: width, |
| @@ -274,7 +274,7 @@ | ||
| 274 | 274 | <select id="sd_sampler"></select> |
| 275 | 275 | </div> |
| 276 | 276 | |
| 277 | 277 | <div class="flex1" data-sd-source="comfy,auto,novel"> |
| 278 | 278 | <label for="sd_scheduler" data-i18n="Scheduler">Scheduler</label> |
| 279 | 279 | <select id="sd_scheduler"></select> |
| 280 | 280 | </div> |
| @@ -307,15 +307,18 @@ router.post('/generate-image', jsonParser, async (request, response) => { | ||
| 307 | 307 | }, |
| 308 | 308 | body: JSON.stringify({ |
| 309 | 309 | action: 'generate', |
| 310 | 310 | input: request.body.prompt ?? '', |
| 311 | 311 | model: request.body.model ?? 'nai-diffusion', |
| 312 | 312 | parameters: { |
| 313 | + params_version: 3, | |
| 314 | + prefer_brownian: true, | |
| 313 | 315 | negative_prompt: request.body.negative_prompt ?? '', |
| 314 | 316 | height: request.body.height ?? 512, |
| 315 | 317 | width: request.body.width ?? 512, |
| 316 | 318 | scale: request.body.scale ?? 9, |
| 317 | 319 | seed: request.body.seed >= 0 ? request.body.seed : Math.floor(Math.random() * 9999999999), |
| 318 | 320 | sampler: request.body.sampler ?? 'k_dpmpp_2m', |
| 321 | + noise_schedule: request.body.scheduler ?? 'karras', | |
| 319 | 322 | steps: request.body.steps ?? 28, |
| 320 | 323 | n_samples: 1, |
| 321 | 324 | // NAI handholding for prompts |
| @@ -323,11 +326,32 @@ router.post('/generate-image', jsonParser, async (request, response) => { | ||
| 323 | 326 | qualityToggle: false, |
| 324 | 327 | add_original_image: false, |
| 325 | 328 | controlnet_strength: 1, |
| 329 | + deliberate_euler_ancestral_bug: false, | |
| 326 | 330 | dynamic_thresholding: request.body.decrisper ?? false, |
| 327 | 331 | legacy: false, |
| 332 | + legacy_v3_extend: false, | |
| 328 | 333 | sm: request.body.sm ?? false, |
| 329 | 334 | sm_dyn: request.body.sm_dyn ?? false, |
| 330 | 335 | uncond_scale: 1, |
| 336 | + use_coords: false, | |
| 337 | + characterPrompts: [], | |
| 338 | + reference_image_multiple: [], | |
| 339 | + reference_information_extracted_multiple: [], | |
| 340 | + reference_strength_multiple: [], | |
| 341 | + v4_negative_prompt: { | |
| 342 | + caption: { | |
| 343 | + base_caption: request.body.negative_prompt ?? '', | |
| 344 | + char_captions: [], | |
| 345 | + }, | |
| 346 | + }, | |
| 347 | + v4_prompt: { | |
| 348 | + caption: { | |
| 349 | + base_caption: request.body.prompt ?? '', | |
| 350 | + char_captions: [], | |
| 351 | + }, | |
| 352 | + use_coords: false, | |
| 353 | + use_order: true, | |
| 354 | + }, | |
| 331 | 355 | }, |
| 332 | 356 | }), |
| 333 | 357 | }); |