Add support for NovelAI V4 model and configuration settings
This commit is contained in:
@@ -35,7 +35,25 @@
|
||||
image: '',
|
||||
InfoExtracted: 0.5,
|
||||
RefStrength: 0.5,
|
||||
refimage: ''
|
||||
refimage: '',
|
||||
autoSmea:false,
|
||||
legacy_uc:false,
|
||||
use_coords:false,
|
||||
v4_prompt:{
|
||||
caption:{
|
||||
base_caption:'',
|
||||
char_captions:[]
|
||||
},
|
||||
use_coords:false,
|
||||
use_order:true
|
||||
},
|
||||
v4_negative_prompt:{
|
||||
caption:{
|
||||
base_caption:'',
|
||||
char_captions:[]
|
||||
},
|
||||
legacy_uc:false,
|
||||
}
|
||||
}
|
||||
if (DBState.db.NAIImgConfig.sampler === 'ddim_v3'){
|
||||
DBState.db.NAIImgConfig.sm = false
|
||||
@@ -43,7 +61,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
let submenu = $state(DBState.db.useLegacyGUI ? -1 : 0)
|
||||
let submenu = $state(DBState.db.useLegacyGUI ? -1 : 0);
|
||||
|
||||
// HypaV3
|
||||
$effect(() => {
|
||||
@@ -88,6 +106,14 @@
|
||||
return parseFloat(maxMemoryRatio.toFixed(2));
|
||||
}
|
||||
// End HypaV3
|
||||
|
||||
// add init NAI V4
|
||||
// if(DBState.db.NAIImgConfig.autoSmea === undefined) DBState.db.NAIImgConfig.autoSmea = false;
|
||||
// if(DBState.db.NAIImgConfig.use_coords === undefined) DBState.db.NAIImgConfig.use_coords = false;
|
||||
// if(DBState.db.NAIImgConfig.v4_prompt.use_coords === undefined) DBState.db.NAIImgConfig.v4_prompt.use_coords = false;
|
||||
// if(DBState.db.NAIImgConfig.v4_prompt.use_order === undefined) DBState.db.NAIImgConfig.v4_prompt.use_order = false;
|
||||
// if(DBState.db.NAIImgConfig.v4_negative_prompt.legacy_uc === undefined) DBState.db.NAIImgConfig.v4_negative_prompt.legacy_uc = false;
|
||||
|
||||
</script>
|
||||
<h2 class="mb-2 text-2xl font-bold mt-2">{language.otherBots}</h2>
|
||||
|
||||
@@ -176,13 +202,24 @@
|
||||
<TextInput size="sm" marginBottom placeholder="pst-..." bind:value={DBState.db.NAIApiKey}/>
|
||||
|
||||
<span class="text-textcolor">Model</span>
|
||||
<TextInput size="sm" marginBottom placeholder="nai-diffusion-3" bind:value={DBState.db.NAIImgModel}/>
|
||||
<TextInput size="sm" marginBottom placeholder="nai-diffusion-4-full" bind:value={DBState.db.NAIImgModel}/>
|
||||
|
||||
<span class="text-textcolor">Width</span>
|
||||
<NumberInput size="sm" marginBottom min={0} max={2048} bind:value={DBState.db.NAIImgConfig.width}/>
|
||||
<span class="text-textcolor">Height</span>
|
||||
<NumberInput size="sm" marginBottom min={0} max={2048} bind:value={DBState.db.NAIImgConfig.height}/>
|
||||
<span class="text-textcolor">Sampler</span>
|
||||
|
||||
{#if DBState.db.NAIImgModel === 'nai-diffusion-4-full'}
|
||||
<SelectInput className="mt-2 mb-4" bind:value={DBState.db.NAIImgConfig.sampler}>
|
||||
<OptionInput value="k_euler_ancestral" >(Recommended)Euler Ancestral</OptionInput>
|
||||
<OptionInput value="k_dpmpp_2s_ancestral" >(Recommended)DPM++ 2S Ancestral</OptionInput>
|
||||
<OptionInput value="k_dpmpp_2m_sde" >(Recommended)DPM++ 2M SDE</OptionInput>
|
||||
<OptionInput value="k_euler" >(Other)Euler</OptionInput>
|
||||
<OptionInput value="k_dpmpp_2m" >(Other)DPM++ 2M</OptionInput>
|
||||
<OptionInput value="k_dpmpp_sde" >(Other)DPM++ SDE</OptionInput>
|
||||
</SelectInput>
|
||||
{:else}
|
||||
<SelectInput className="mt-2 mb-4" bind:value={DBState.db.NAIImgConfig.sampler}>
|
||||
<OptionInput value="k_euler" >Euler</OptionInput>
|
||||
<OptionInput value="k_euler_ancestral" >Euler Ancestral</OptionInput>
|
||||
@@ -192,6 +229,8 @@
|
||||
<OptionInput value="k_dpmpp_2s" >DPM++ 2S</OptionInput>
|
||||
<OptionInput value="ddim_v3" >DDIM</OptionInput>
|
||||
</SelectInput>
|
||||
{/if}
|
||||
|
||||
<span class="text-textcolor">steps</span>
|
||||
<NumberInput size="sm" marginBottom min={0} max={2048} bind:value={DBState.db.NAIImgConfig.steps}/>
|
||||
<span class="text-textcolor">CFG scale</span>
|
||||
@@ -199,10 +238,22 @@
|
||||
|
||||
{#if !DBState.db.NAII2I || DBState.db.NAIImgConfig.sampler !== 'ddim_v3'}
|
||||
<Check bind:check={DBState.db.NAIImgConfig.sm} name="Use SMEA"/>
|
||||
{:else if DBState.db.NAIImgModel !== 'nai-diffusion-4-full'}
|
||||
<Check bind:check={DBState.db.NAIImgConfig.sm_dyn} name='Use DYN'/>
|
||||
{/if}
|
||||
<Check bind:check={DBState.db.NAII2I} name="Enable I2I"/>
|
||||
|
||||
{#if DBState.db.NAIImgModel === 'nai-diffusion-4-full'}
|
||||
<Check bind:check={DBState.db.NAIImgConfig.autoSmea} name='Auto Smea'/>
|
||||
<Check bind:check={DBState.db.NAIImgConfig.use_coords} name='Use coords'/>
|
||||
<Check bind:check={DBState.db.NAIImgConfig.legacy_uc} name='Use legacy uc'/>
|
||||
|
||||
<!-- <Check bind:check={DBState.db.NAIImgConfig.v4_prompt.use_coords} name='Use v4 prompt coords'/>-->
|
||||
<!-- <Check bind:check={DBState.db.NAIImgConfig.v4_prompt.use_order} name='Use v4 prompt order'/>-->
|
||||
|
||||
<!-- <Check bind:check={DBState.db.NAIImgConfig.v4_negative_prompt.legacy_uc} name='Use v4 negative prompt legacy uc'/>-->
|
||||
{/if}
|
||||
|
||||
{#if DBState.db.NAII2I}
|
||||
|
||||
<span class="text-textcolor mt-4">Strength</span>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { get } from "svelte/store"
|
||||
import { getDatabase, type character } from "../storage/database.svelte"
|
||||
import { getDatabase, type character, type NAIImgConfig } from "../storage/database.svelte"
|
||||
import { requestChatData } from "./request"
|
||||
import { alertError } from "../alert"
|
||||
import { fetchNative, globalFetch, readImage } from "../globalApi.svelte"
|
||||
@@ -125,6 +125,62 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
|
||||
|
||||
let reqlist:any = {}
|
||||
|
||||
const commonReq = {
|
||||
body: {
|
||||
"input": genPrompt,
|
||||
"model": db.NAIImgModel,
|
||||
"parameters": {
|
||||
"params_version": 3,
|
||||
"add_original_image": true,
|
||||
"cfg_rescale": 0,
|
||||
"controlnet_strength": 1,
|
||||
"dynamic_thresholding": false,
|
||||
"n_samples": 1,
|
||||
"width": db.NAIImgConfig.width,
|
||||
"height": db.NAIImgConfig.height,
|
||||
"sampler": db.NAIImgConfig.sampler,
|
||||
"steps": db.NAIImgConfig.steps,
|
||||
"scale": db.NAIImgConfig.scale,
|
||||
"negative_prompt": neg,
|
||||
"sm": false,
|
||||
"sm_dyn": false,
|
||||
"noise": db.NAIImgConfig.noise,
|
||||
"noise_schedule": "native",
|
||||
"strength": db.NAIImgConfig.strength,
|
||||
"ucPreset": 3,
|
||||
"uncond_scale": 1,
|
||||
"qualityToggle": false,
|
||||
"lagacy_v3_extend": false,
|
||||
"lagacy": false,
|
||||
"reference_information_extracted": db.NAIImgConfig.InfoExtracted,
|
||||
"reference_strength": db.NAIImgConfig.RefStrength,
|
||||
//add v4
|
||||
"autoSmea": db.NAIImgConfig.autoSmea || false,
|
||||
use_coords: db.NAIImgConfig.use_coords || false,
|
||||
legacy_uc: db.NAIImgConfig.legacy_uc || false,
|
||||
v4_prompt:{
|
||||
caption:{
|
||||
base_caption:genPrompt,
|
||||
char_captions: []
|
||||
},
|
||||
use_coords: false,//db.NAIImgConfig.v4_prompt.use_coords || false,
|
||||
use_order: true//db.NAIImgConfig.v4_prompt.use_order || true
|
||||
},
|
||||
"v4_negative_prompt":{
|
||||
caption:{
|
||||
base_caption:neg,
|
||||
char_captions: []
|
||||
},
|
||||
legacy_uc: false//db.NAIImgConfig.v4_negative_prompt.legacy_uc || false,
|
||||
}
|
||||
}
|
||||
},
|
||||
headers:{
|
||||
"Authorization": "Bearer " + db.NAIApiKey
|
||||
},
|
||||
rawResponse: true
|
||||
}
|
||||
|
||||
if(db.NAII2I){
|
||||
let seed = Math.floor(Math.random() * 10000000000)
|
||||
|
||||
@@ -140,65 +196,25 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
|
||||
|
||||
let refimgbase64 = undefined
|
||||
|
||||
|
||||
|
||||
|
||||
if(db.NAIREF){
|
||||
if(db.NAIImgConfig.refimage !== ''){
|
||||
refimgbase64 = Buffer.from(await readImage(db.NAIImgConfig.refimage)).toString('base64');
|
||||
}
|
||||
}
|
||||
|
||||
reqlist = {
|
||||
body: {
|
||||
"action": "img2img",
|
||||
"input": genPrompt,
|
||||
"model": db.NAIImgModel,
|
||||
"parameters": {
|
||||
"params_version": 1,
|
||||
"add_original_image": true,
|
||||
"cfg_rescale": 0,
|
||||
"controlnet_strength": 1,
|
||||
"dynamic_thresholding": false,
|
||||
"extra_noise_seed": seed,
|
||||
"n_samples": 1,
|
||||
"width": db.NAIImgConfig.width,
|
||||
"height": db.NAIImgConfig.height,
|
||||
"sampler": db.NAIImgConfig.sampler,
|
||||
"steps": db.NAIImgConfig.steps,
|
||||
"scale": db.NAIImgConfig.scale,
|
||||
"seed": seed,
|
||||
"negative_prompt": neg,
|
||||
"sm": false,
|
||||
"sm_dyn": false,
|
||||
"noise": db.NAIImgConfig.noise,
|
||||
"noise_schedule": "native",
|
||||
"strength": db.NAIImgConfig.strength,
|
||||
"image": base64img,
|
||||
"ucPreset": 3,
|
||||
"uncond_scale": 1,
|
||||
"qualityToggle": false,
|
||||
"lagacy_v3_extend": false,
|
||||
"lagacy": false,
|
||||
"reference_information_extracted": db.NAIImgConfig.InfoExtracted,
|
||||
"reference_strength": db.NAIImgConfig.RefStrength
|
||||
}
|
||||
},
|
||||
headers:{
|
||||
"Authorization": "Bearer " + db.NAIApiKey
|
||||
},
|
||||
rawResponse: true
|
||||
}
|
||||
reqlist = commonReq;
|
||||
reqlist.body.action = "img2img";
|
||||
reqlist.body.parameters.image = base64img;
|
||||
reqlist.body.parameters.extra_noise_seed = seed;
|
||||
reqlist.body.parameters.seed = seed;
|
||||
|
||||
if(refimgbase64 !== undefined){
|
||||
reqlist.body.parameters.reference_image = refimgbase64
|
||||
}
|
||||
}else{
|
||||
|
||||
|
||||
if (db.NAIREF) {
|
||||
|
||||
|
||||
let base64img = ''
|
||||
if(db.NAIImgConfig.image === ''){
|
||||
const charimg = currentChar.image;
|
||||
@@ -208,84 +224,12 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
|
||||
} else{
|
||||
base64img = Buffer.from(await readImage(db.NAIImgConfig.refimage)).toString('base64');
|
||||
}
|
||||
reqlist = {
|
||||
body: {
|
||||
"action": "generate",
|
||||
"input": genPrompt,
|
||||
"model": db.NAIImgModel,
|
||||
"parameters": {
|
||||
"params_version": 1,
|
||||
"add_original_image": true,
|
||||
"cfg_rescale": 0,
|
||||
"controlnet_strength": 1,
|
||||
"dynamic_thresholding": false,
|
||||
"n_samples": 1,
|
||||
"width": db.NAIImgConfig.width,
|
||||
"height": db.NAIImgConfig.height,
|
||||
"sampler": db.NAIImgConfig.sampler,
|
||||
"steps": db.NAIImgConfig.steps,
|
||||
"scale": db.NAIImgConfig.scale,
|
||||
"negative_prompt": neg,
|
||||
"sm": db.NAIImgConfig.sm,
|
||||
"sm_dyn": db.NAIImgConfig.sm_dyn,
|
||||
"noise_schedule": "native",
|
||||
"ucPreset": 3,
|
||||
"uncond_scale": 1,
|
||||
"qualityToggle": false,
|
||||
"legacy": false,
|
||||
"lagacy_v3_extend": false,
|
||||
"reference_image": base64img,
|
||||
"reference_strength": db.NAIImgConfig.RefStrength,
|
||||
"reference_information_extracted": db.NAIImgConfig.InfoExtracted
|
||||
}
|
||||
},
|
||||
headers:{
|
||||
"Authorization": "Bearer " + db.NAIApiKey
|
||||
},
|
||||
rawResponse: true
|
||||
}
|
||||
reqlist = commonReq;
|
||||
reqlist.body.action = 'generate';
|
||||
reqlist.body.parameters.reference_image = base64img;
|
||||
} else {
|
||||
reqlist = {
|
||||
body: {
|
||||
"input": genPrompt,
|
||||
"model": db.NAIImgModel,
|
||||
"parameters": {
|
||||
"params_version": 1,
|
||||
"width": db.NAIImgConfig.width,
|
||||
"height": db.NAIImgConfig.height,
|
||||
"scale": db.NAIImgConfig.scale,
|
||||
"sampler": db.NAIImgConfig.sampler,
|
||||
"steps": db.NAIImgConfig.steps,
|
||||
"n_samples": 1,
|
||||
"ucPreset": 3,
|
||||
"qualityToggle": false,
|
||||
"sm": db.NAIImgConfig.sm,
|
||||
"sm_dyn": db.NAIImgConfig.sm_dyn,
|
||||
"dynamic_thresholding": false,
|
||||
"controlnet_strength": 1,
|
||||
"legacy": false,
|
||||
"add_original_image": true,
|
||||
"uncond_scale": 1,
|
||||
"cfg_rescale": 0,
|
||||
"noise_schedule": "native",
|
||||
"legacy_v3_extend": false,
|
||||
"reference_information_extracted": db.NAIImgConfig.InfoExtracted,
|
||||
"reference_strength": db.NAIImgConfig.RefStrength,
|
||||
"negative_prompt": neg,
|
||||
reqlist = commonReq;
|
||||
}
|
||||
},
|
||||
headers:{
|
||||
"Authorization": "Bearer " + db.NAIApiKey
|
||||
},
|
||||
rawResponse: true
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
try {
|
||||
const da = await globalFetch(db.NAIImgUrl, reqlist)
|
||||
|
||||
@@ -264,7 +264,26 @@ export function setDatabase(data:Database){
|
||||
image:"",
|
||||
refimage:"",
|
||||
InfoExtracted:1,
|
||||
RefStrength:0.4
|
||||
RefStrength:0.4,
|
||||
//add 4
|
||||
autoSmea:false,
|
||||
legacy_uc:false,
|
||||
use_coords:false,
|
||||
v4_prompt:{
|
||||
caption:{
|
||||
base_caption:'',
|
||||
char_captions:[]
|
||||
},
|
||||
use_coords:false,
|
||||
use_order:true
|
||||
},
|
||||
v4_negative_prompt:{
|
||||
caption:{
|
||||
base_caption:'',
|
||||
char_captions:[]
|
||||
},
|
||||
legacy_uc:false,
|
||||
}
|
||||
}
|
||||
}
|
||||
if(checkNullish(data.customTextTheme)){
|
||||
@@ -1363,7 +1382,7 @@ interface sdConfig{
|
||||
hr_upscaler:string
|
||||
}
|
||||
|
||||
interface NAIImgConfig{
|
||||
export interface NAIImgConfig{
|
||||
width:number,
|
||||
height:number,
|
||||
sampler:string,
|
||||
@@ -1377,8 +1396,43 @@ interface NAIImgConfig{
|
||||
refimage:string,
|
||||
InfoExtracted:number,
|
||||
RefStrength:number
|
||||
//add 4
|
||||
autoSmea:boolean,
|
||||
use_coords:boolean,
|
||||
legacy_uc: boolean,
|
||||
v4_prompt:NAIImgConfigV4Prompt,
|
||||
v4_negative_prompt:NAIImgConfigV4NegativePrompt,
|
||||
|
||||
}
|
||||
|
||||
//add 4
|
||||
interface NAIImgConfigV4Prompt{
|
||||
caption: NAIImgConfigV4Caption,
|
||||
use_coords: boolean,
|
||||
use_order: boolean
|
||||
}
|
||||
//add 4
|
||||
interface NAIImgConfigV4NegativePrompt{
|
||||
caption: NAIImgConfigV4Caption,
|
||||
legacy_uc: boolean
|
||||
}
|
||||
//add 4
|
||||
interface NAIImgConfigV4Caption{
|
||||
base_caption: string,
|
||||
char_captions: NAIImgConfigV4CharCaption[]
|
||||
}
|
||||
//add 4
|
||||
interface NAIImgConfigV4CharCaption{
|
||||
char_caption: string,
|
||||
centers:
|
||||
{
|
||||
x: number,
|
||||
y: number
|
||||
}[]
|
||||
|
||||
}
|
||||
|
||||
|
||||
interface ComfyConfig{
|
||||
workflow:string,
|
||||
posNodeID: string,
|
||||
|
||||
Reference in New Issue
Block a user