mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Merge pull request #2863 from SillyTavern/unify-user-avatar
Unify default user avatars
This commit is contained in:
BIN
public/img/user-default.png
Normal file
BIN
public/img/user-default.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
@ -510,6 +510,7 @@ let saveCharactersPage = 0;
|
|||||||
export const default_avatar = 'img/ai4.png';
|
export const default_avatar = 'img/ai4.png';
|
||||||
export const system_avatar = 'img/five.png';
|
export const system_avatar = 'img/five.png';
|
||||||
export const comment_avatar = 'img/quill.png';
|
export const comment_avatar = 'img/quill.png';
|
||||||
|
export const default_user_avatar = 'img/user-default.png';
|
||||||
export let CLIENT_VERSION = 'SillyTavern:UNKNOWN:Cohee#1207'; // For Horde header
|
export let CLIENT_VERSION = 'SillyTavern:UNKNOWN:Cohee#1207'; // For Horde header
|
||||||
let optionsPopper = Popper.createPopper(document.getElementById('options_button'), document.getElementById('options'), {
|
let optionsPopper = Popper.createPopper(document.getElementById('options_button'), document.getElementById('options'), {
|
||||||
placement: 'top-start',
|
placement: 'top-start',
|
||||||
|
@ -2,7 +2,7 @@ import {
|
|||||||
characters,
|
characters,
|
||||||
chat,
|
chat,
|
||||||
chat_metadata,
|
chat_metadata,
|
||||||
default_avatar,
|
default_user_avatar,
|
||||||
eventSource,
|
eventSource,
|
||||||
event_types,
|
event_types,
|
||||||
getRequestHeaders,
|
getRequestHeaders,
|
||||||
@ -357,7 +357,7 @@ async function createDummyPersona() {
|
|||||||
// Date + name (only ASCII) to make it unique
|
// Date + name (only ASCII) to make it unique
|
||||||
const avatarId = `${Date.now()}-${personaName.replace(/[^a-zA-Z0-9]/g, '')}.png`;
|
const avatarId = `${Date.now()}-${personaName.replace(/[^a-zA-Z0-9]/g, '')}.png`;
|
||||||
initPersona(avatarId, personaName, '');
|
initPersona(avatarId, personaName, '');
|
||||||
await uploadUserAvatar(default_avatar, avatarId);
|
await uploadUserAvatar(default_user_avatar, avatarId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -944,7 +944,7 @@ async function onPersonasRestoreInput(e) {
|
|||||||
// If the avatar is missing, upload it
|
// If the avatar is missing, upload it
|
||||||
if (!avatarsList.includes(key)) {
|
if (!avatarsList.includes(key)) {
|
||||||
warnings.push(`Persona image "${key}" (${value}) is missing, uploading default avatar`);
|
warnings.push(`Persona image "${key}" (${value}) is missing, uploading default avatar`);
|
||||||
await uploadUserAvatar(default_avatar, key);
|
await uploadUserAvatar(default_user_avatar, key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ const PUBLIC_DIRECTORIES = {
|
|||||||
extensions: 'public/scripts/extensions',
|
extensions: 'public/scripts/extensions',
|
||||||
};
|
};
|
||||||
|
|
||||||
const DEFAULT_AVATAR = '/img/ai4.png';
|
|
||||||
const SETTINGS_FILE = 'settings.json';
|
const SETTINGS_FILE = 'settings.json';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -422,7 +421,6 @@ const VLLM_KEYS = [
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
DEFAULT_USER,
|
DEFAULT_USER,
|
||||||
DEFAULT_AVATAR,
|
|
||||||
SETTINGS_FILE,
|
SETTINGS_FILE,
|
||||||
PUBLIC_DIRECTORIES,
|
PUBLIC_DIRECTORIES,
|
||||||
USER_DIRECTORY_TEMPLATE,
|
USER_DIRECTORY_TEMPLATE,
|
||||||
|
@ -726,13 +726,12 @@ router.post('/create', urlencodedParser, async function (request, response) {
|
|||||||
const char = JSON.stringify(charaFormatData(request.body, request.user.directories));
|
const char = JSON.stringify(charaFormatData(request.body, request.user.directories));
|
||||||
const internalName = getPngName(request.body.ch_name, request.user.directories);
|
const internalName = getPngName(request.body.ch_name, request.user.directories);
|
||||||
const avatarName = `${internalName}.png`;
|
const avatarName = `${internalName}.png`;
|
||||||
const defaultAvatar = './public/img/ai4.png';
|
|
||||||
const chatsPath = path.join(request.user.directories.chats, internalName);
|
const chatsPath = path.join(request.user.directories.chats, internalName);
|
||||||
|
|
||||||
if (!fs.existsSync(chatsPath)) fs.mkdirSync(chatsPath);
|
if (!fs.existsSync(chatsPath)) fs.mkdirSync(chatsPath);
|
||||||
|
|
||||||
if (!request.file) {
|
if (!request.file) {
|
||||||
await writeCharacterData(defaultAvatar, char, internalName, request);
|
await writeCharacterData(defaultAvatarPath, char, internalName, request);
|
||||||
return response.send(avatarName);
|
return response.send(avatarName);
|
||||||
} else {
|
} else {
|
||||||
const crop = tryParse(request.query.crop);
|
const crop = tryParse(request.query.crop);
|
||||||
|
@ -10,7 +10,7 @@ const express = require('express');
|
|||||||
const mime = require('mime-types');
|
const mime = require('mime-types');
|
||||||
const archiver = require('archiver');
|
const archiver = require('archiver');
|
||||||
|
|
||||||
const { USER_DIRECTORY_TEMPLATE, DEFAULT_USER, PUBLIC_DIRECTORIES, DEFAULT_AVATAR, SETTINGS_FILE } = require('./constants');
|
const { USER_DIRECTORY_TEMPLATE, DEFAULT_USER, PUBLIC_DIRECTORIES, SETTINGS_FILE } = require('./constants');
|
||||||
const { getConfigValue, color, delay, setConfigValue, generateTimestamp } = require('./util');
|
const { getConfigValue, color, delay, setConfigValue, generateTimestamp } = require('./util');
|
||||||
const { readSecret, writeSecret } = require('./endpoints/secrets');
|
const { readSecret, writeSecret } = require('./endpoints/secrets');
|
||||||
|
|
||||||
@ -24,6 +24,7 @@ const ANON_CSRF_SECRET = crypto.randomBytes(64).toString('base64');
|
|||||||
* @type {Map<string, UserDirectoryList>}
|
* @type {Map<string, UserDirectoryList>}
|
||||||
*/
|
*/
|
||||||
const DIRECTORIES_CACHE = new Map();
|
const DIRECTORIES_CACHE = new Map();
|
||||||
|
const PUBLIC_USER_AVATAR = '/img/default-user.png';
|
||||||
|
|
||||||
const STORAGE_KEYS = {
|
const STORAGE_KEYS = {
|
||||||
csrfSecret: 'csrfSecret',
|
csrfSecret: 'csrfSecret',
|
||||||
@ -478,11 +479,11 @@ async function getUserAvatar(handle) {
|
|||||||
const settings = fs.existsSync(pathToSettings) ? JSON.parse(fs.readFileSync(pathToSettings, 'utf8')) : {};
|
const settings = fs.existsSync(pathToSettings) ? JSON.parse(fs.readFileSync(pathToSettings, 'utf8')) : {};
|
||||||
const avatarFile = settings?.power_user?.default_persona || settings?.user_avatar;
|
const avatarFile = settings?.power_user?.default_persona || settings?.user_avatar;
|
||||||
if (!avatarFile) {
|
if (!avatarFile) {
|
||||||
return DEFAULT_AVATAR;
|
return PUBLIC_USER_AVATAR;
|
||||||
}
|
}
|
||||||
const avatarPath = path.join(directory.avatars, avatarFile);
|
const avatarPath = path.join(directory.avatars, avatarFile);
|
||||||
if (!fs.existsSync(avatarPath)) {
|
if (!fs.existsSync(avatarPath)) {
|
||||||
return DEFAULT_AVATAR;
|
return PUBLIC_USER_AVATAR;
|
||||||
}
|
}
|
||||||
const mimeType = mime.lookup(avatarPath);
|
const mimeType = mime.lookup(avatarPath);
|
||||||
const base64Content = fs.readFileSync(avatarPath, 'base64');
|
const base64Content = fs.readFileSync(avatarPath, 'base64');
|
||||||
@ -490,7 +491,7 @@ async function getUserAvatar(handle) {
|
|||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
// Ignore errors
|
// Ignore errors
|
||||||
return DEFAULT_AVATAR;
|
return PUBLIC_USER_AVATAR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user