Unify default user avatars Closes #2862

8ec509c77727cad919915f49833c6e1ccf7ea1f8

Cohee <18619528+Cohee1207@users.noreply.github.com>

6 files changed, +10 -11Showing whitespace changes
public/img/user-default.png+0 -0

Binary file

public/script.js+1 -0
@@ -510,6 +510,7 @@ let saveCharactersPage = 0;
510510export const default_avatar = 'img/ai4.png';
511511export const system_avatar = 'img/five.png';
512512export const comment_avatar = 'img/quill.png';
513+export const default_user_avatar = 'img/user-default.png';
513514export let CLIENT_VERSION = 'SillyTavern:UNKNOWN:Cohee#1207'; // For Horde header
514515let optionsPopper = Popper.createPopper(document.getElementById('options_button'), document.getElementById('options'), {
515516 placement: 'top-start',
public/scripts/personas.js+3 -3
@@ -2,7 +2,7 @@ import {
22 characters,
33 chat,
44 chat_metadata,
55 default_avatardefault_user_avatar,
66 eventSource,
77 event_types,
88 getRequestHeaders,
@@ -357,7 +357,7 @@ async function createDummyPersona() {
357357 // Date + name (only ASCII) to make it unique
358358 const avatarId = `${Date.now()}-${personaName.replace(/[^a-zA-Z0-9]/g, '')}.png`;
359359 initPersona(avatarId, personaName, '');
360360 await uploadUserAvatar(default_avatardefault_user_avatar, avatarId);
361361}
362362
363363/**
@@ -944,7 +944,7 @@ async function onPersonasRestoreInput(e) {
944944 // If the avatar is missing, upload it
945945 if (!avatarsList.includes(key)) {
946946 warnings.push(`Persona image "${key}" (${value}) is missing, uploading default avatar`);
947947 await uploadUserAvatar(default_avatardefault_user_avatar, key);
948948 }
949949 }
950950
src/constants.js+0 -2
@@ -5,7 +5,6 @@ const PUBLIC_DIRECTORIES = {
55 extensions: 'public/scripts/extensions',
66};
77
8-const DEFAULT_AVATAR = '/img/ai4.png';
98const SETTINGS_FILE = 'settings.json';
109
1110/**
@@ -422,7 +421,6 @@ const VLLM_KEYS = [
422421
423422module.exports = {
424423 DEFAULT_USER,
425- DEFAULT_AVATAR,
426424 SETTINGS_FILE,
427425 PUBLIC_DIRECTORIES,
428426 USER_DIRECTORY_TEMPLATE,
src/endpoints/characters.js+1 -2
@@ -726,13 +726,12 @@ router.post('/create', urlencodedParser, async function (request, response) {
726726 const char = JSON.stringify(charaFormatData(request.body, request.user.directories));
727727 const internalName = getPngName(request.body.ch_name, request.user.directories);
728728 const avatarName = `${internalName}.png`;
729- const defaultAvatar = './public/img/ai4.png';
730729 const chatsPath = path.join(request.user.directories.chats, internalName);
731730
732731 if (!fs.existsSync(chatsPath)) fs.mkdirSync(chatsPath);
733732
734733 if (!request.file) {
735734 await writeCharacterData(defaultAvatardefaultAvatarPath, char, internalName, request);
736735 return response.send(avatarName);
737736 } else {
738737 const crop = tryParse(request.query.crop);
src/users.js+5 -4
@@ -10,7 +10,7 @@ const express = require('express');
1010const mime = require('mime-types');
1111const archiver = require('archiver');
1212
1313const { USER_DIRECTORY_TEMPLATE, DEFAULT_USER, PUBLIC_DIRECTORIES, DEFAULT_AVATAR, SETTINGS_FILE } = require('./constants');
1414const { getConfigValue, color, delay, setConfigValue, generateTimestamp } = require('./util');
1515const { readSecret, writeSecret } = require('./endpoints/secrets');
1616
@@ -24,6 +24,7 @@ const ANON_CSRF_SECRET = crypto.randomBytes(64).toString('base64');
2424 * @type {Map<string, UserDirectoryList>}
2525 */
2626const DIRECTORIES_CACHE = new Map();
27+const PUBLIC_USER_AVATAR = '/img/default-user.png';
2728
2829const STORAGE_KEYS = {
2930 csrfSecret: 'csrfSecret',
@@ -478,11 +479,11 @@ async function getUserAvatar(handle) {
478479 const settings = fs.existsSync(pathToSettings) ? JSON.parse(fs.readFileSync(pathToSettings, 'utf8')) : {};
479480 const avatarFile = settings?.power_user?.default_persona || settings?.user_avatar;
480481 if (!avatarFile) {
481482 return DEFAULT_AVATARPUBLIC_USER_AVATAR;
482483 }
483484 const avatarPath = path.join(directory.avatars, avatarFile);
484485 if (!fs.existsSync(avatarPath)) {
485486 return DEFAULT_AVATARPUBLIC_USER_AVATAR;
486487 }
487488 const mimeType = mime.lookup(avatarPath);
488489 const base64Content = fs.readFileSync(avatarPath, 'base64');
@@ -490,7 +491,7 @@ async function getUserAvatar(handle) {
490491 }
491492 catch {
492493 // Ignore errors
493494 return DEFAULT_AVATARPUBLIC_USER_AVATAR;
494495 }
495496}
496497