{language.otherBots}
{#if submenu !== -1}
{
submenu = 0
}} class="p-2 flex-1 border-r border-darkborderc" class:bg-darkbutton={submenu === 0}>
{language.longTermMemory}
{
submenu = 1
}} class="p2 flex-1 border-r border-darkborderc" class:bg-darkbutton={submenu === 1}>
TTS
{
submenu = 2
}} class="p-2 flex-1 border-r border-darkborderc" class:bg-darkbutton={submenu === 2}>
{language.emotionImage}
{
submenu = 3
}} class="p-2 flex-1" class:bg-darkbutton={submenu === 3}>
{language.imageGeneration}
{/if}
{#if submenu === 3 || submenu === -1}
{language.imageGeneration} {language.provider}
None
Stable Diffusion WebUI
Novel AI
Dall-E
Stability API
Fal.ai
ComfyUI
{#if DBState.db.sdProvider === 'comfy'}
ComfyUI (Legacy)
{/if}
{#if DBState.db.sdProvider === 'webui'}
You must use WebUI with --api flag
You must use WebUI without agpl license or use unmodified version with agpl license to observe the contents of the agpl license.
{#if !isTauri}
You are using web version. you must use ngrok or other tunnels to use your local webui.
{/if}
WebUI {language.providerURL}
Steps
CFG Scale
Width
Height
Sampler
{#if DBState.db.sdConfig.enable_hr === true}
denoising_strength
hr_scale
Upscaler
{/if}
{/if}
{#if DBState.db.sdProvider === 'novelai'}
Novel AI {language.providerURL}
API Key
Model
{
DBState.db.NAIImgModel = imageModel;
}}>
Choose...
nai-diffusion-4-full
nai-diffusion-4-curated-preview
nai-diffusion-3
nai-diffusion-furry-3
nai-diffusion-2
Width
Height
Sampler
{#if DBState.db.NAIImgModel === 'nai-diffusion-4-full'
|| DBState.db.NAIImgModel === 'nai-diffusion-4-curated-preview'}
(Recommended)Euler Ancestral
(Recommended)DPM++ 2S Ancestral
(Recommended)DPM++ 2M SDE
(Other)Euler
(Other)DPM++ 2M
(Other)DPM++ SDE
{:else}
Euler
Euler Ancestral
DPM++ 2S Ancestral
DPM++ 2M
DPM++ SDE
DPM++ 2S
DDIM
{/if}
Noise Schedule
Choose...
native
karras
exponential
polyexponential
steps
CFG scale
CFG rescale
Noise Schedule
karras
exponential
polyexponential
{#if !DBState.db.NAII2I || DBState.db.NAIImgConfig.sampler !== 'ddim_v3'}
{:else if DBState.db.NAIImgModel === 'nai-diffusion-4-full'
|| DBState.db.NAIImgModel === 'nai-diffusion-4-curated-preview'}
{/if}
{#if DBState.db.NAIImgModel === 'nai-diffusion-4-full'
|| DBState.db.NAIImgModel === 'nai-diffusion-4-curated-preview'}
Prompt Guidance Rescale
{/if}
{#if DBState.db.NAII2I}
Strength
{DBState.db.NAIImgConfig.strength}
Noise
{DBState.db.NAIImgConfig.noise}
Base image
{
const img = await selectSingleFile([
'jpg',
'jpeg',
'png',
'webp'
])
if(!img){
return null
}
const saveId = await saveAsset(img.data)
DBState.db.NAIImgConfig.image = saveId
}}>
{#if DBState.db.NAIImgConfig.image === ''}
{:else}
{#await getCharImage(DBState.db.NAIImgConfig.image, 'css')}
{:then im}
{/await}
{/if}
{/if}
Vibe
{
const file = await selectSingleFile(['naiv4vibe'])
if(!file){
return null
}
try {
const vibeData = JSON.parse(new TextDecoder().decode(file.data))
if (vibeData.version !== 1 || vibeData.identifier !== "novelai-vibe-transfer") {
alertError("Invalid vibe file. Version must be 1.")
return
}
// Store the vibe data
DBState.db.NAIImgConfig.vibe_data = vibeData
// Set the thumbnail as preview image for display
if (vibeData.thumbnail) {
// Clear the array and add the thumbnail
DBState.db.NAIImgConfig.reference_image_multiple = [];
// Set default model selection based on current model
if (DBState.db.NAIImgModel.includes('nai-diffusion-4-full')) {
DBState.db.NAIImgConfig.vibe_model_selection = 'v4full';
} else if (DBState.db.NAIImgModel.includes('nai-diffusion-4-curated')) {
DBState.db.NAIImgConfig.vibe_model_selection = 'v4curated';
}
// Set InfoExtracted to the first value for the selected model
const selectedModel = DBState.db.NAIImgConfig.vibe_model_selection;
if (selectedModel && vibeData.encodings[selectedModel]) {
const encodings = vibeData.encodings[selectedModel];
const firstKey = Object.keys(encodings)[0];
if (firstKey) {
DBState.db.NAIImgConfig.InfoExtracted = Number(encodings[firstKey].params.information_extracted);
}
}
}
// Initialize reference_strength_multiple if not set
if (!DBState.db.NAIImgConfig.reference_strength_multiple || !Array.isArray(DBState.db.NAIImgConfig.reference_strength_multiple)) {
DBState.db.NAIImgConfig.reference_strength_multiple = [0.7];
}
} catch (error) {
alertError("Error parsing vibe file: " + error)
}
}}>
Upload Vibe
{#if DBState.db.NAIImgConfig.vibe_data}
{
DBState.db.NAIImgConfig.vibe_data = undefined;
DBState.db.NAIImgConfig.vibe_model_selection = undefined;
}}
class="absolute top-2 right-2 bg-red-500 hover:bg-red-700 text-white font-bold py-1 px-2 rounded"
>
Delete
Vibe Model
{
// When vibe model changes, set InfoExtracted to the first value
if (DBState.db.NAIImgConfig.vibe_data?.encodings &&
DBState.db.NAIImgConfig.vibe_model_selection &&
DBState.db.NAIImgConfig.vibe_data.encodings[DBState.db.NAIImgConfig.vibe_model_selection]) {
const encodings = DBState.db.NAIImgConfig.vibe_data.encodings[DBState.db.NAIImgConfig.vibe_model_selection];
const firstKey = Object.keys(encodings)[0];
if (firstKey) {
DBState.db.NAIImgConfig.InfoExtracted = Number(encodings[firstKey].params.information_extracted);
}
}
}}>
{#if DBState.db.NAIImgConfig.vibe_data.encodings?.v4full}
nai-diffusion-4-full
{/if}
{#if DBState.db.NAIImgConfig.vibe_data.encodings?.v4curated}
nai-diffusion-4-curated
{/if}
Information Extracted
{#if DBState.db.NAIImgConfig.vibe_model_selection && DBState.db.NAIImgConfig.vibe_data.encodings[DBState.db.NAIImgConfig.vibe_model_selection]}
{#each Object.entries(DBState.db.NAIImgConfig.vibe_data.encodings[DBState.db.NAIImgConfig.vibe_model_selection]) as [key, value]}
{value.params.information_extracted}
{/each}
{/if}
Reference Strength Multiple
{/if}
{/if}
{#if DBState.db.sdProvider === 'dalle'}
OpenAI API Key
Dall-E Quality
Standard
HD
{/if}
{#if DBState.db.sdProvider === 'stability'}
Stability API Key
Stability Model
SD Ultra
SD Core
SD3 Large
SD3 Medium
{#if DBState.db.stabilityModel === 'core'}
SD Core Style
Unspecified
3D Model
Analog Film
Anime
Cinematic
Comic Book
Digital Art
Enhance
Fantasy Art
Isometric
Line Art
Low Poly
Modeling Compound
Neon Punk
Origami
Photographic
Pixel Art
Tile Texture
{/if}
{/if}
{#if DBState.db.sdProvider === 'comfyui'}
ComfyUI {language.providerURL}
Workflow
Timeout (sec)
{/if}
{#if DBState.db.sdProvider === 'comfy'}
The first image generated by the prompt will be selected.
{#if !isTauri}
"Please run comfyUI with --enable-cors-header."
{/if}
ComfyUI {language.providerURL}
Workflow
Positive Text Node: ID
Positive Text Node: Input Field Name
Negative Text Node: ID
Positive Text Node: Input Field Name
Timeout (sec)
{/if}
{#if DBState.db.sdProvider === 'fal'}
Fal.ai API Key
Width
Height
Model
Flux[Dev]
Flux[Dev] with Lora
Flux[Pro]
Flux[Schnell]
{#if DBState.db.falModel === 'fal-ai/flux-lora'}
Lora Model URL
Lora Weight
{/if}
{/if}
{/if}
{#if submenu === 1 || submenu === -1}
Auto Speech
ElevenLabs API key
VOICEVOX URL
OpenAI Key
NovelAI API key
Huggingface Key
fish-speech API Key
{/if}
{#if submenu === 2 || submenu === -1}
{language.emotionMethod}
Ax. Model
MiniLM-L6-v2
{/if}
{#if submenu === 0 || submenu === -1}
{language.type}
{
//@ts-ignore
const value = v.target.value
if (value === 'supaMemory'){
DBState.db.supaModelType = 'distilbart'
DBState.db.memoryAlgorithmType = 'supaMemory'
DBState.db.hypav2 = false
DBState.db.hanuraiEnable = false
DBState.db.hypaV3 = false
} else if (value === 'hanuraiMemory'){
DBState.db.supaModelType = 'none'
DBState.db.memoryAlgorithmType = 'hanuraiMemory'
DBState.db.hypav2 = false
DBState.db.hanuraiEnable = true
DBState.db.hypaV3 = false
} else if (value === 'hypaV2') {
DBState.db.supaModelType = 'distilbart'
DBState.db.memoryAlgorithmType = 'hypaMemoryV2'
DBState.db.hypav2= true
DBState.db.hanuraiEnable = false
DBState.db.hypaV3 = false
} else if (value === 'hypaV3') {
DBState.db.memoryAlgorithmType = 'hypaMemoryV3'
DBState.db.supaModelType = 'none'
DBState.db.hanuraiEnable = false
DBState.db.hypav2 = false
DBState.db.hypaV3 = true
} else {
DBState.db.supaModelType = 'none'
DBState.db.memoryAlgorithmType = 'none'
DBState.db.hypav2 = false
DBState.db.hanuraiEnable = false
DBState.db.hypaV3 = false
}
}}>
None
{language.SuperMemory}
{language.HypaMemory} V2
{language.hanuraiMemory}
{language.HypaMemory} V3
{#if DBState.db.hanuraiEnable}
{language.hanuraiDesc}
Chunk Size
{:else if DBState.db.hypav2}
{language.hypaV2Desc}
{language.SuperMemory} {language.model}
distilbart-cnn-6-6 (Free/Local)
OpenAI 3.5 Turbo Instruct
{language.submodel}
{#if DBState.db.supaModelType === 'davinci' || DBState.db.supaModelType === 'curie' || DBState.db.supaModelType === 'instruct35'}
{language.SuperMemory} OpenAI Key
{/if}
{language.summarizationPrompt}
{language.hypaChunkSize}
{language.hypaAllocatedTokens}
{:else if DBState.db.hypaV3}
{language.hypaV3Settings.descriptionLabel}
Preset
{#each DBState.db.hypaV3Presets as preset, i}
{preset.name}
{/each}
{
const newPreset = createHypaV3Preset()
const presets = DBState.db.hypaV3Presets
presets.push(newPreset)
DBState.db.hypaV3Presets = presets
DBState.db.hypaV3PresetId = DBState.db.hypaV3Presets.length - 1
}}>
{
const presets = DBState.db.hypaV3Presets
if(presets.length === 0){
alertError("There must be least one preset.")
return
}
const id = DBState.db.hypaV3PresetId
const preset = presets[id]
const newName = await alertInput(`Enter new name for ${preset.name}`)
if (!newName || newName.trim().length === 0) return
preset.name = newName
DBState.db.hypaV3Presets = presets
}}>
{
const presets = DBState.db.hypaV3Presets
if(presets.length <= 1){
alertError("There must be least one preset.")
return
}
const id = DBState.db.hypaV3PresetId
const preset = presets[id]
const confirmed = await alertConfirm(`${language.removeConfirm}${preset.name}`)
if (!confirmed) return
DBState.db.hypaV3PresetId = 0
presets.splice(id, 1)
DBState.db.hypaV3Presets = presets
}}>
{
try {
const presets = DBState.db.hypaV3Presets
if(presets.length === 0){
alertError("There must be least one preset.")
return
}
const id = DBState.db.hypaV3PresetId
const preset = presets[id]
const bytesExport = Buffer.from(JSON.stringify({
type: 'risu',
ver: 1,
data: preset
}), 'utf-8')
await downloadFile(`hypaV3_export_${preset.name}.json`, bytesExport)
alertNormal(language.successExport)
} catch (error) {
alertError(`${error}`)
}
}}>
{
try {
const bytesImport = (await selectSingleFile(['json'])).data
if(!bytesImport) return
const objImport = JSON.parse(Buffer.from(bytesImport).toString('utf-8'))
if(objImport.type !== 'risu' || !objImport.data) return
const newPreset = createHypaV3Preset(
objImport.data.name || "Imported Preset",
objImport.data.settings || {}
);
const presets = DBState.db.hypaV3Presets
presets.push(newPreset)
DBState.db.hypaV3Presets = presets
DBState.db.hypaV3PresetId = DBState.db.hypaV3Presets.length - 1
alertNormal(language.successImport)
} catch (error) {
alertError(`${error}`)
}
}}>
{#if DBState.db.hypaV3Presets?.[DBState.db.hypaV3PresetId]?.settings}
{@const settings = DBState.db.hypaV3Presets[DBState.db.hypaV3PresetId].settings}
{language.SuperMemory} {language.model}
{language.submodel}
{#if "gpu" in navigator}
Qwen3 1.7B (GPU)
Qwen3 4B (GPU)
Qwen3 8B (GPU)
{/if}
{language.summarizationPrompt}
{#await getMaxMemoryRatio() then maxMemoryRatio}
{language.hypaV3Settings.maxMemoryTokensRatioLabel}
{:catch error}
{language.hypaV3Settings.maxMemoryTokensRatioError}
{/await}
{language.hypaV3Settings.memoryTokensRatioLabel}
{language.hypaV3Settings.extraSummarizationRatioLabel}
{language.hypaV3Settings.maxChatsPerSummaryLabel}
{language.hypaV3Settings.recentMemoryRatioLabel}
{language.hypaV3Settings.similarMemoryRatioLabel}
{language.hypaV3Settings.randomMemoryRatioLabel}
{#if settings.useExperimentalImpl}
Summarization Requests Per Minute
Summarization Max Concurrent
Embedding Requests Per Minute
Embedding Max Concurrent
{:else}
{/if}
{/if}
{:else if (DBState.db.supaModelType !== 'none' && DBState.db.hypav2 === false && DBState.db.hypaV3 === false)}
{language.supaDesc}
{language.SuperMemory} {language.model}
distilbart-cnn-6-6 (Free/Local)
OpenAI 3.5 Turbo Instruct
{language.submodel}
{language.maxSupaChunkSize}
{#if DBState.db.supaModelType === 'davinci' || DBState.db.supaModelType === 'curie' || DBState.db.supaModelType === 'instruct35'}
{language.SuperMemory} OpenAI Key
{/if}
{#if DBState.db.supaModelType !== 'none'}
{language.SuperMemory} Prompt
{/if}
{/if}
{language.embedding}
{#if 'gpu' in navigator}
MiniLM L6 v2 (GPU)
Nomic Embed Text v1.5 (GPU)
BGE Small English (GPU)
BGE Medium 3 (GPU)
Multilingual MiniLM L12 v2 (GPU)
BGE Medium 3 Korean (GPU)
{/if}
MiniLM L6 v2 (CPU)
Nomic Embed Text v1.5 (CPU)
BGE Small English (CPU)
BGE Medium 3 (CPU)
Multilingual MiniLM L12 v2 (CPU)
BGE Medium 3 Korean (CPU)
OpenAI text-embedding-3-small
OpenAI text-embedding-3-large
OpenAI Ada
Custom (OpenAI-compatible)
{#if DBState.db.hypaModel === 'openai3small' || DBState.db.hypaModel === 'openai3large' || DBState.db.hypaModel === 'ada'}
OpenAI API Key
{/if}
{#if DBState.db.hypaModel === 'custom'}
URL
Key/Password
Request Model
{/if}
{/if}