mirror of
https://github.com/KoboldAI/KoboldAI-Client.git
synced 2025-06-05 21:59:24 +02:00
Add images to lorecards
This commit is contained in:
@@ -4466,11 +4466,14 @@ async function postWI(wiData) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadNAILorebook(data, filename) {
|
async function loadNAILorebook(data, filename, image=null) {
|
||||||
let lorebookVersion = data.lorebookVersion;
|
let lorebookVersion = data.lorebookVersion;
|
||||||
let wi_data = {folders: {[filename]: []}, entries: {}};
|
let wi_data = {folders: {[filename]: []}, entries: {}};
|
||||||
console.log(`Loading NAI lorebook version ${lorebookVersion}`);
|
console.log(`Loading NAI lorebook version ${lorebookVersion}`);
|
||||||
|
|
||||||
|
let base = Math.max(...Object.keys(world_info_data).map(Number)) + 1;
|
||||||
|
if (base < 0) base = 0;
|
||||||
|
|
||||||
let i = 0;
|
let i = 0;
|
||||||
for (const entry of data.entries) {
|
for (const entry of data.entries) {
|
||||||
// contextConfig: Object { suffix: "\n", tokenBudget: 2048, reservedTokens: 0, … }
|
// contextConfig: Object { suffix: "\n", tokenBudget: 2048, reservedTokens: 0, … }
|
||||||
@@ -4499,10 +4502,25 @@ async function loadNAILorebook(data, filename) {
|
|||||||
};
|
};
|
||||||
wi_data.folders[filename].push(i);
|
wi_data.folders[filename].push(i);
|
||||||
|
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
await postWI(wi_data);
|
await postWI(wi_data);
|
||||||
|
|
||||||
|
if (image) {
|
||||||
|
for (let offset=0;offset<i;offset++) {
|
||||||
|
let uid = base+offset;
|
||||||
|
|
||||||
|
const imageEl = $el(`#world_info_image_${uid}`);
|
||||||
|
if (imageEl) imageEl.src = image;
|
||||||
|
|
||||||
|
let r = await fetch(`/set_wi_image/${uid}`, {
|
||||||
|
method: "POST",
|
||||||
|
body: image
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadKoboldData(data, filename) {
|
async function loadKoboldData(data, filename) {
|
||||||
@@ -4521,16 +4539,32 @@ async function loadKoboldData(data, filename) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function readLoreCard(file) {
|
async function blob2Base64(blob) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
|
reader.onload = () => resolve(reader.result);
|
||||||
|
reader.onerror = error => reject(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function blob2ArrayBuffer(blob) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.readAsArrayBuffer(blob);
|
||||||
|
reader.onload = () => resolve(reader.result);
|
||||||
|
reader.onerror = error => reject(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function readLoreCard(file) {
|
||||||
// "naidata"
|
// "naidata"
|
||||||
const magicNumber = new Uint8Array([0x6e, 0x61, 0x69, 0x64, 0x61, 0x74, 0x61]);
|
const magicNumber = new Uint8Array([0x6e, 0x61, 0x69, 0x64, 0x61, 0x74, 0x61]);
|
||||||
|
|
||||||
let filename = file.name;
|
let filename = file.name;
|
||||||
let reader = new FileReader();
|
let reader = new FileReader();
|
||||||
reader.readAsArrayBuffer(file);
|
|
||||||
|
|
||||||
reader.addEventListener("load", function() {
|
let bin = new Uint8Array(await blob2ArrayBuffer(file))
|
||||||
let bin = new Uint8Array(reader.result);
|
|
||||||
|
|
||||||
// naidata is prefixed with magic number
|
// naidata is prefixed with magic number
|
||||||
let offset = bin.findIndex(function(item, possibleIndex, array) {
|
let offset = bin.findIndex(function(item, possibleIndex, array) {
|
||||||
@@ -4557,8 +4591,8 @@ function readLoreCard(file) {
|
|||||||
// Encoded in base64
|
// Encoded in base64
|
||||||
let data = atob(new TextDecoder().decode(binData));
|
let data = atob(new TextDecoder().decode(binData));
|
||||||
let j = JSON.parse(data);
|
let j = JSON.parse(data);
|
||||||
loadNAILorebook(j, filename);
|
let b64Image = await blob2Base64(file);
|
||||||
})
|
loadNAILorebook(j, filename, b64Image);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function processDroppedFile(file) {
|
async function processDroppedFile(file) {
|
||||||
|
Reference in New Issue
Block a user