Code updates due to NAID API changes and feature additions. (#291)

# PR Checklist
- [ v ] Did you check if it works normally in all models? *ignore this
when it dosen't uses models*
- [ v ] Did you check if it works normally in all of web, local and node
hosted versions? if it dosen't, did you blocked it in those versions?
- [ v ] Did you added a type def?

# Description
This commit is contained in:
kwaroran
2024-02-22 12:41:55 +09:00
committed by GitHub
3 changed files with 187 additions and 44 deletions

View File

@@ -69,7 +69,7 @@
{#if $DataBase.sdProvider === 'novelai'} {#if $DataBase.sdProvider === 'novelai'}
<span class="text-textcolor mt-2">Novel AI {language.providerURL}</span> <span class="text-textcolor mt-2">Novel AI {language.providerURL}</span>
<TextInput size="sm" marginBottom placeholder="https://api.novelai.net" bind:value={$DataBase.NAIImgUrl}/> <TextInput size="sm" marginBottom placeholder="https://image.novelai.net" bind:value={$DataBase.NAIImgUrl}/>
<span class="text-textcolor">API Key</span> <span class="text-textcolor">API Key</span>
<TextInput size="sm" marginBottom placeholder="pst-..." bind:value={$DataBase.NAIApiKey}/> <TextInput size="sm" marginBottom placeholder="pst-..." bind:value={$DataBase.NAIApiKey}/>
@@ -95,7 +95,7 @@
<span class="text-textcolor">CFG scale</span> <span class="text-textcolor">CFG scale</span>
<NumberInput size="sm" marginBottom min={0} max={2048} bind:value={$DataBase.NAIImgConfig.scale}/> <NumberInput size="sm" marginBottom min={0} max={2048} bind:value={$DataBase.NAIImgConfig.scale}/>
{#if !$DataBase.NAII2I || $DataBase.NAIImgConfig.sampler === 'ddim_v3'} {#if !$DataBase.NAII2I || $DataBase.NAIImgConfig.sampler !== 'ddim_v3'}
<Check bind:check={$DataBase.NAIImgConfig.sm} name="Use SMEA"/> <Check bind:check={$DataBase.NAIImgConfig.sm} name="Use SMEA"/>
<Check bind:check={$DataBase.NAIImgConfig.sm_dyn} name='Use DYN'/> <Check bind:check={$DataBase.NAIImgConfig.sm_dyn} name='Use DYN'/>
{/if} {/if}
@@ -103,10 +103,10 @@
{#if $DataBase.NAII2I} {#if $DataBase.NAII2I}
<span class="text-textcolor mt-4">strength</span> <span class="text-textcolor mt-4">Strength</span>
<SliderInput min={0} max={0.99} step={0.01} bind:value={$DataBase.NAIImgConfig.strength}/> <SliderInput min={0} max={0.99} step={0.01} bind:value={$DataBase.NAIImgConfig.strength}/>
<span class="text-textcolor2 mb-6 text-sm">{$DataBase.NAIImgConfig.strength}</span> <span class="text-textcolor2 mb-6 text-sm">{$DataBase.NAIImgConfig.strength}</span>
<span class="text-textcolor">noise</span> <span class="text-textcolor">Noise</span>
<SliderInput min={0} max={0.99} step={0.01} bind:value={$DataBase.NAIImgConfig.noise}/> <SliderInput min={0} max={0.99} step={0.01} bind:value={$DataBase.NAIImgConfig.noise}/>
<span class="text-textcolor2 mb-6 text-sm">{$DataBase.NAIImgConfig.noise}</span> <span class="text-textcolor2 mb-6 text-sm">{$DataBase.NAIImgConfig.noise}</span>
@@ -136,6 +136,47 @@
</button> </button>
{/if} {/if}
<Check bind:check={$DataBase.NAIREF} name="Enable Reference" className="mt-4"/>
{#if $DataBase.NAIREF}
<span class="text-textcolor mt-4">Information Extracted</span>
<SliderInput min={0} max={1} step={0.01} bind:value={$DataBase.NAIImgConfig.InfoExtracted}/>
<span class="text-textcolor2 mb-6 text-sm">{$DataBase.NAIImgConfig.InfoExtracted}</span>
<span class="text-textcolor">Reference Strength</span>
<SliderInput min={0} max={1} step={0.01} bind:value={$DataBase.NAIImgConfig.RefStrength}/>
<span class="text-textcolor2 mb-6 text-sm">{$DataBase.NAIImgConfig.RefStrength}</span>
<span class="text-textcolor">Reference image</span>
<button on:click={async () => {
const img = await selectSingleFile([
'jpg',
'jpeg',
'png',
'webp'
])
if(!img){
return null
}
const saveId = await saveAsset(img.data)
$DataBase.NAIImgConfig.refimage = saveId
}}>
{#if $DataBase.NAIImgConfig.refimage === ''}
<div class="rounded-md h-20 w-20 shadow-lg bg-textcolor2 cursor-pointer hover:text-green-500"/>
{:else}
{#await getCharImage($DataBase.NAIImgConfig.refimage, 'css')}
<div class="rounded-md h-20 w-20 shadow-lg bg-textcolor2 cursor-pointer hover:text-green-500"/>
{:then im}
<div class="rounded-md h-20 w-20 shadow-lg bg-textcolor2 cursor-pointer hover:text-green-500" style={im} />
{/await}
{/if}
</button>
{/if}
{/if} {/if}
</Arcodion> </Arcodion>

View File

@@ -112,18 +112,19 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
} }
} }
if(db.sdProvider === 'novelai'){ if(db.sdProvider === 'novelai'){
genPrompt = genPrompt
.replaceAll('\\(', "♧")
.replaceAll('\\)', "♤")
.replaceAll('(','{')
.replaceAll(')','}')
.replaceAll('♧','(')
.replaceAll('♤',')')
let reqlist= {} let reqlist:any = {}
if(db.NAII2I){ if(db.NAII2I){
genPrompt = genPrompt let seed = Math.floor(Math.random() * 10000000000)
.replaceAll('\\(', "♧")
.replaceAll('\\)', "♤")
.replaceAll('(','{')
.replaceAll(')','}')
.replaceAll('♧','(')
.replaceAll('♤',')')
let base64img = '' let base64img = ''
if(db.NAIImgConfig.image === ''){ if(db.NAIImgConfig.image === ''){
const charimg = currentChar.image; const charimg = currentChar.image;
@@ -133,26 +134,37 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
} else{ } else{
base64img = Buffer.from(await readImage(db.NAIImgConfig.image)).toString('base64'); 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 = { reqlist = {
body: { body: {
"action": "img2img", "action": "img2img",
"input": genPrompt, "input": genPrompt,
"model": db.NAIImgModel, "model": db.NAIImgModel,
"parameters": { "parameters": {
"seed": seed, "params_version": 1,
"extra_noise_seed": seed, "add_original_image": true,
"add_original_image": false,
"cfg_rescale": 0, "cfg_rescale": 0,
"controlnet_strength": 1, "controlnet_strength": 1,
"dynamic_threshold": false, "dynamic_thresholding": false,
"extra_noise_seed": seed,
"n_samples": 1, "n_samples": 1,
"width": db.NAIImgConfig.width, "width": db.NAIImgConfig.width,
"height": db.NAIImgConfig.height, "height": db.NAIImgConfig.height,
"sampler": db.NAIImgConfig.sampler, "sampler": db.NAIImgConfig.sampler,
"steps": db.NAIImgConfig.steps, "steps": db.NAIImgConfig.steps,
"scale": db.NAIImgConfig.scale, "scale": db.NAIImgConfig.scale,
"seed": seed,
"negative_prompt": neg, "negative_prompt": neg,
"sm": false, "sm": false,
"sm_dyn": false, "sm_dyn": false,
@@ -160,8 +172,13 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
"noise_schedule": "native", "noise_schedule": "native",
"strength": db.NAIImgConfig.strength, "strength": db.NAIImgConfig.strength,
"image": base64img, "image": base64img,
"ucPreset": 2, "ucPreset": 3,
"uncond_scale": 1 "uncond_scale": 1,
"qualityToggle": false,
"lagacy_v3_extend": false,
"lagacy": false,
"reference_information_extracted": db.NAIImgConfig.InfoExtracted,
"reference_strength": db.NAIImgConfig.RefStrength
} }
}, },
headers:{ headers:{
@@ -169,28 +186,103 @@ export async function generateAIImage(genPrompt:string, currentChar:character, n
}, },
rawResponse: true rawResponse: true
} }
if(refimgbase64 !== undefined){
reqlist.body.parameters.reference_image = refimgbase64
}
}else{ }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 { try {
const da = await globalFetch(db.NAIImgUrl, reqlist) const da = await globalFetch(db.NAIImgUrl, reqlist)

View File

@@ -175,7 +175,7 @@ export function setDatabase(data:Database){
data.sdCFG = 7 data.sdCFG = 7
} }
if(checkNullish(data.NAIImgUrl)){ 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)){ if(checkNullish(data.NAIApiKey)){
data.NAIApiKey = '' data.NAIApiKey = ''
@@ -184,7 +184,10 @@ export function setDatabase(data:Database){
data.NAIImgModel = 'nai-diffusion-3' data.NAIImgModel = 'nai-diffusion-3'
} }
if(checkNullish(data.NAII2I)){ if(checkNullish(data.NAII2I)){
data.NAII2I = true data.NAII2I = false
}
if(checkNullish(data.NAIREF)){
data.NAIREF = false
} }
if(checkNullish(data.textTheme)){ if(checkNullish(data.textTheme)){
data.textTheme = "standard" data.textTheme = "standard"
@@ -251,10 +254,13 @@ export function setDatabase(data:Database){
steps:28, steps:28,
scale:5, scale:5,
sm:true, sm:true,
sm_dyn:true, sm_dyn:false,
noise:0.0, noise:0.0,
strength:0.6, strength:0.6,
image:"" image:"",
refimage:"",
InfoExtracted:1,
RefStrength:0.4
} }
} }
if(checkNullish(data.customTextTheme)){ if(checkNullish(data.customTextTheme)){
@@ -447,6 +453,7 @@ export interface Database{
NAIApiKey:string NAIApiKey:string
NAIImgModel:string NAIImgModel:string
NAII2I:boolean NAII2I:boolean
NAIREF:boolean
NAIImgConfig:NAIImgConfig NAIImgConfig:NAIImgConfig
runpodKey:string runpodKey:string
promptPreprocess:boolean promptPreprocess:boolean
@@ -829,7 +836,10 @@ interface NAIImgConfig{
sm_dyn:boolean, sm_dyn:boolean,
noise:number, noise:number,
strength: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' export type FormatingOrderItem = 'main'|'jailbreak'|'chats'|'lorebook'|'globalNote'|'authorNote'|'lastChat'|'description'|'postEverything'|'personaPrompt'