diff --git a/src/lib/Setting/Pages/OtherBotSettings.svelte b/src/lib/Setting/Pages/OtherBotSettings.svelte index 45d8ef59..e199f8da 100644 --- a/src/lib/Setting/Pages/OtherBotSettings.svelte +++ b/src/lib/Setting/Pages/OtherBotSettings.svelte @@ -69,7 +69,7 @@ {#if $DataBase.sdProvider === 'novelai'} Novel AI {language.providerURL} - + API Key @@ -95,7 +95,7 @@ CFG scale - {#if !$DataBase.NAII2I || $DataBase.NAIImgConfig.sampler === 'ddim_v3'} + {#if !$DataBase.NAII2I || $DataBase.NAIImgConfig.sampler !== 'ddim_v3'} {/if} @@ -103,10 +103,10 @@ {#if $DataBase.NAII2I} - strength + Strength {$DataBase.NAIImgConfig.strength} - noise + Noise {$DataBase.NAIImgConfig.noise} @@ -136,6 +136,47 @@ {/if} + + + + {#if $DataBase.NAIREF} + + + Information Extracted + + {$DataBase.NAIImgConfig.InfoExtracted} + Reference Strength + + {$DataBase.NAIImgConfig.RefStrength} + + + + + Reference image + + {/if} {/if} diff --git a/src/ts/process/stableDiff.ts b/src/ts/process/stableDiff.ts index 8cbc3433..79a40dba 100644 --- a/src/ts/process/stableDiff.ts +++ b/src/ts/process/stableDiff.ts @@ -112,18 +112,19 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n } } if(db.sdProvider === 'novelai'){ + genPrompt = genPrompt + .replaceAll('\\(', "♧") + .replaceAll('\\)', "♤") + .replaceAll('(','{') + .replaceAll(')','}') + .replaceAll('♧','(') + .replaceAll('♤',')') - let reqlist= {} + let reqlist:any = {} if(db.NAII2I){ - genPrompt = genPrompt - .replaceAll('\\(', "♧") - .replaceAll('\\)', "♤") - .replaceAll('(','{') - .replaceAll(')','}') - .replaceAll('♧','(') - .replaceAll('♤',')') - + let seed = Math.floor(Math.random() * 10000000000) + let base64img = '' if(db.NAIImgConfig.image === ''){ const charimg = currentChar.image; @@ -133,26 +134,37 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n } else{ base64img = Buffer.from(await readImage(db.NAIImgConfig.image)).toString('base64'); } + + let refimgbase64 = undefined + + + + + if(db.NAIREF){ + if(db.NAIImgConfig.refimage !== ''){ + refimgbase64 = Buffer.from(await readImage(db.NAIImgConfig.refimage)).toString('base64'); + } + } - let seed = Math.floor(Math.random() * 10000000000) reqlist = { body: { "action": "img2img", "input": genPrompt, "model": db.NAIImgModel, "parameters": { - "seed": seed, - "extra_noise_seed": seed, - "add_original_image": false, + "params_version": 1, + "add_original_image": true, "cfg_rescale": 0, "controlnet_strength": 1, - "dynamic_threshold": false, + "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, @@ -160,8 +172,13 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n "noise_schedule": "native", "strength": db.NAIImgConfig.strength, "image": base64img, - "ucPreset": 2, - "uncond_scale": 1 + "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:{ @@ -169,28 +186,103 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n }, rawResponse: true } + + if(refimgbase64 !== undefined){ + reqlist.body.parameters.reference_image = refimgbase64 + } }else{ - reqlist = { - body: { - "input": genPrompt, - "model": db.NAIImgModel, - "parameters": { - "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 - } - }, - headers:{ - "Authorization": "Bearer " + db.NAIApiKey - }, - rawResponse: true + + if (db.NAIREF) { + + + let base64img = '' + if(db.NAIImgConfig.image === ''){ + const charimg = currentChar.image; + + const img = await readImage(charimg) + base64img = Buffer.from(img).toString('base64'); + } 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 + } + } 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, + } + }, + headers:{ + "Authorization": "Bearer " + db.NAIApiKey + }, + rawResponse: true + + } } + + + + + } try { const da = await globalFetch(db.NAIImgUrl, reqlist) diff --git a/src/ts/storage/database.ts b/src/ts/storage/database.ts index 50760dc1..f02cd511 100644 --- a/src/ts/storage/database.ts +++ b/src/ts/storage/database.ts @@ -175,7 +175,7 @@ export function setDatabase(data:Database){ data.sdCFG = 7 } if(checkNullish(data.NAIImgUrl)){ - data.NAIImgUrl = 'https://api.novelai.net/ai/generate-image' + data.NAIImgUrl = 'https://image.novelai.net/ai/generate-image' } if(checkNullish(data.NAIApiKey)){ data.NAIApiKey = '' @@ -184,7 +184,10 @@ export function setDatabase(data:Database){ data.NAIImgModel = 'nai-diffusion-3' } if(checkNullish(data.NAII2I)){ - data.NAII2I = true + data.NAII2I = false + } + if(checkNullish(data.NAIREF)){ + data.NAIREF = false } if(checkNullish(data.textTheme)){ data.textTheme = "standard" @@ -251,10 +254,13 @@ export function setDatabase(data:Database){ steps:28, scale:5, sm:true, - sm_dyn:true, + sm_dyn:false, noise:0.0, strength:0.6, - image:"" + image:"", + refimage:"", + InfoExtracted:1, + RefStrength:0.4 } } if(checkNullish(data.customTextTheme)){ @@ -447,6 +453,7 @@ export interface Database{ NAIApiKey:string NAIImgModel:string NAII2I:boolean + NAIREF:boolean NAIImgConfig:NAIImgConfig runpodKey:string promptPreprocess:boolean @@ -829,7 +836,10 @@ interface NAIImgConfig{ sm_dyn:boolean, noise:number, strength:number, - image:string + image:string, + refimage:string, + InfoExtracted:number, + RefStrength:number } export type FormatingOrderItem = 'main'|'jailbreak'|'chats'|'lorebook'|'globalNote'|'authorNote'|'lastChat'|'description'|'postEverything'|'personaPrompt'