From 57077f237aaf251fc75f3773cebc3a4b57b0dfd6 Mon Sep 17 00:00:00 2001
From: Concedo <39025047+LostRuins@users.noreply.github.com>
Date: Sun, 26 Jul 2026 18:41:59 +0800
Subject: [PATCH] updated lite
---
embd_res/klite.embd | 130 +++++++++++++++++++++++++++++++++-----------
1 file changed, 98 insertions(+), 32 deletions(-)
diff --git a/embd_res/klite.embd b/embd_res/klite.embd
index f57da85e0..66f80193d 100644
--- a/embd_res/klite.embd
+++ b/embd_res/klite.embd
@@ -10248,23 +10248,23 @@ Current version indicated by LITEVER below.
return new_save_storyobj;
}
- function load_file(event) {
+ function load_file(event, to_groupchat=false) {
let input = event.target;
if (input.files.length > 0) {
var selectedFile = input.files[0];
- load_selected_file(selectedFile);
+ load_selected_file(selectedFile, to_groupchat);
- document.getElementById("loadfileinput").value = "";
+ input.value = "";
} else {
console.log("No file to load")
}
};
//attempt to load a file from disk. could be any format, even images
- function load_selected_file(selectedFile)
+ function load_selected_file(selectedFile, to_groupchat=false)
{
var selectedFilename = "";
if(selectedFile)
@@ -10281,7 +10281,7 @@ Current version indicated by LITEVER below.
//we don't want to fiddle with the file as its very complex. only handle the parts we are interested in, and just leave the rest untouched.
if (is_kai_json(new_loaded_storyobj) && !new_loaded_storyobj.scenarioVersion) {
//quick sanity check. if prompt does not exist, this is not a KAI save.
- kai_json_load(new_loaded_storyobj,false);
+ kai_json_load(new_loaded_storyobj,false, false, true, to_groupchat);
if (selectedFilename && selectedFilename != "") {
localsettings.last_known_filename = selectedFilename;
}
@@ -10290,15 +10290,19 @@ Current version indicated by LITEVER below.
let has_tav_wi_check = has_tavern_wi_check(new_loaded_storyobj);
if (!new_loaded_storyobj.scenarioVersion && (new_loaded_storyobj.name != null || new_loaded_storyobj.description != null ||
new_loaded_storyobj.personality != null || (new_loaded_storyobj.spec=="chara_card_v2" || new_loaded_storyobj.spec=="chara_card_v3") || has_tav_wi_check)) {
- load_tavern_obj(new_loaded_storyobj);
+ load_tavern_obj(new_loaded_storyobj,to_groupchat);
}
else if (new_loaded_storyobj.char_name != null || new_loaded_storyobj.char_persona != null) {
//check for ooba text generation fields (character)
- load_ooba_obj(new_loaded_storyobj);
+ load_ooba_obj(new_loaded_storyobj,to_groupchat);
}
else if(new_loaded_storyobj.md && new_loaded_storyobj.savedsettings) //add some compat loading for sharefiles
{
- kai_json_load(new_loaded_storyobj,false);
+ kai_json_load(new_loaded_storyobj,false, false, true, to_groupchat);
+ }
+ else if(to_groupchat)
+ {
+ msgbox("Could not import selected file as a group chat participant. Please select a KoboldAI save, Tavern character card, Risu card, or compatible Ooba character file.");
}
else if(new_loaded_storyobj.scenarioVersion>1 && new_loaded_storyobj.scenarioVersion<10)
{
@@ -10324,37 +10328,24 @@ Current version indicated by LITEVER below.
const data = pngfr.result;
const arr = new Uint8Array(data);
- function setImgAsAvatar(data)
- {
- compressImage(data, (compressedImageURI, aspectratio) => {
- aestheticInstructUISettings.AI_portrait = compressedImageURI;
- document.getElementById('portrait_ratio_AI').value = aspectratio.toFixed(2);
- refreshAestheticPreview(true);
- render_gametext();
- }, true, AVATAR_PX);
- }
-
// 1. Try Tavern PNG
let result = convertTavernPng(arr);
if (result) {
- load_tavern_obj(result);
- setImgAsAvatar(data);
+ load_tavern_obj(result,to_groupchat,data);
return;
}
// 2. Try Tavern EXIF
result = getTavernExifJSON(arr);
if (result) {
- load_tavern_obj(result);
- setImgAsAvatar(data);
+ load_tavern_obj(result,to_groupchat,data);
return;
}
// 3. Try Risu V3
result = extractRisuData(arr);
if (result) {
- load_tavern_obj(result);
- setImgAsAvatar(data);
+ load_tavern_obj(result,to_groupchat,data);
return;
}
@@ -10362,13 +10353,19 @@ Current version indicated by LITEVER below.
try {
result = UnzipKAISTORYFile(arr);
if (result) {
- kai_json_load(result, false);
+ kai_json_load(result, false, false, true, to_groupchat);
return;
}
} catch (error) {
console.log("Unzip failed: " + error);
}
+ if(to_groupchat)
+ {
+ msgbox("Could not import selected file as a group chat participant. Please select a KoboldAI save, Tavern character card, Risu card, or compatible Ooba character file.");
+ return;
+ }
+
//try JSONL
try
{
@@ -10434,8 +10431,19 @@ Current version indicated by LITEVER below.
return is_kai;
}
- function kai_json_load(storyobj, force_load_settings, ignore_multiplayer_sync=false, save_after_loading=true)
+ function kai_json_load(storyobj, force_load_settings, ignore_multiplayer_sync=false, save_after_loading=true, to_groupchat=false)
{
+ if(to_groupchat)
+ {
+ let savedsettings = storyobj.savedsettings || {};
+ let savedaestheticsettings = storyobj.savedaestheticsettings || {};
+ let chatopponent = savedsettings.chatopponent?String(savedsettings.chatopponent).split("||$||")[0]:defaultchatopponent;
+ let memory = storyobj.memory?storyobj.memory:"";
+ memory = replaceAll(memory,"{{char}}",chatopponent,true);
+ let portrait = (savedaestheticsettings.AI_portrait && savedaestheticsettings.AI_portrait!="default") ? savedaestheticsettings.AI_portrait : null;
+ add_another_participant_from_file({name:chatopponent,ctx_memory:memory,portrait:portrait});
+ return;
+ }
//either show popup or just proceed to load
handle_advload_popup((localsettings.show_advanced_load && !force_load_settings),()=>
{
@@ -11065,8 +11073,20 @@ Current version indicated by LITEVER below.
render_gametext(true);
sync_multiplayer(true);
}
- function load_tavern_obj(obj)
+ function load_tavern_obj(obj, to_groupchat=false, image_data=null)
{
+ if(to_groupchat)
+ {
+ if((obj.spec=="chara_card_v2"||obj.spec=="chara_card_v3") && obj.data!=null)
+ {
+ obj = obj.data;
+ }
+ let chatopponent = obj.name?obj.name:defaultchatopponent;
+ let memory = [obj.description, obj.personality].filter(Boolean).join("\n\n");
+ memory = replaceAll(memory,"{{char}}",chatopponent,true);
+ add_another_participant_from_file({name: chatopponent,ctx_memory:memory,portrait:image_data});
+ return;
+ }
let selectedgreeting = "";
let load_tav_obj_confirm_p1 = function(usechatmode) // need second input for alt greeting
{
@@ -11214,11 +11234,28 @@ Current version indicated by LITEVER below.
{
load_tav_obj_confirm_p1(true);
}
+ //set image as avatar
+ if(image_data)
+ {
+ compressImage(image_data, (compressedImageURI, aspectratio) => {
+ aestheticInstructUISettings.AI_portrait = compressedImageURI;
+ document.getElementById('portrait_ratio_AI').value = aspectratio.toFixed(2);
+ refreshAestheticPreview(true);
+ render_gametext();
+ }, true, AVATAR_PX);
+ }
}
- function load_ooba_obj(obj)
+ function load_ooba_obj(obj, to_groupchat=false)
{
console.log("Loading ooba obj");
let chatopponent = obj.char_name?obj.char_name:defaultchatopponent;
+ if(to_groupchat)
+ {
+ let memory = obj.char_persona?obj.char_persona:"";
+ memory = replaceAll(memory,"{{char}}",chatopponent,true);
+ add_another_participant_from_file({name:chatopponent,ctx_memory:memory,portrait:null});
+ return;
+ }
let myname = ((localsettings.chatname && localsettings.chatname!="")?localsettings.chatname:"User");
let memory = obj.char_persona?("Persona: "+obj.char_persona):"";
let scenario = obj.world_scenario?obj.world_scenario:"";
@@ -28106,6 +28143,8 @@ Current version indicated by LITEVER below.
}
gs += ``;
gs += `