Add images to lorecards

This commit is contained in:
somebody
2022-11-25 12:37:04 -06:00
parent 27f89df9d9
commit 8a027c08d9

View File

@@ -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) {