SillyTavern/src/character-card-parser.js

35 lines
954 B
JavaScript
Raw Normal View History

2023-07-20 20:32:15 +03:00
const fs = require('fs');
const extract = require('png-chunks-extract');
const PNGtext = require('png-chunk-text');
const parse = async (cardUrl, format) => {
let fileFormat = format === undefined ? 'png' : format;
2023-07-20 20:32:15 +03:00
switch (fileFormat) {
2023-12-02 10:14:06 -05:00
case 'png': {
2023-07-20 20:32:15 +03:00
const buffer = fs.readFileSync(cardUrl);
const chunks = extract(buffer);
const textChunks = chunks.filter(function (chunk) {
return chunk.name === 'tEXt';
}).map(function (chunk) {
return PNGtext.decode(chunk.data);
});
if (textChunks.length === 0) {
console.error('PNG metadata does not contain any character data.');
throw new Error('No PNG metadata.');
}
2023-07-20 20:32:15 +03:00
return Buffer.from(textChunks[0].text, 'base64').toString('utf8');
2023-12-02 10:14:06 -05:00
}
2023-07-20 20:32:15 +03:00
default:
break;
}
};
module.exports = {
2023-12-02 22:06:57 +02:00
parse: parse,
2023-07-20 20:32:15 +03:00
};