diff --git a/public/scripts/extensions/stable-diffusion/index.js b/public/scripts/extensions/stable-diffusion/index.js index 35bc0165d..705bb151a 100644 --- a/public/scripts/extensions/stable-diffusion/index.js +++ b/public/scripts/extensions/stable-diffusion/index.js @@ -15,6 +15,7 @@ import { import { getApiUrl, getContext, extension_settings, doExtrasFetch, modules } from "../../extensions.js"; import { selected_group } from "../../group-chats.js"; import { stringFormat, initScrollHeight, resetScrollHeight, timestampToMoment, getCharaFilename, saveBase64AsFile } from "../../utils.js"; +import { humanizedDateTime } from "../../RossAscends-mods.js"; export { MODULE_NAME }; // Wraps a string into monospace font-face span @@ -699,7 +700,9 @@ async function generateExtrasImage(prompt, prefix, characterName, callback) { if (result.ok) { const data = await result.json(); - const base64Image = await saveBase64AsFile(data.image, characterName, "jpg"); + //filename should be character name + human readable timestamp + generation mode + const filename = `${characterName}_${humanizedDateTime()}`; + const base64Image = await saveBase64AsFile(data.image, characterName, filename, "jpg"); callback ? callback(prompt, base64Image) : sendMessage(prompt, base64Image); } else { callPopup('Image generation has failed. Please try again.', 'text'); @@ -740,8 +743,8 @@ async function generateHordeImage(prompt, prefix, characterName, callback) { if (result.ok) { const data = await result.text(); - - const base64Image = await saveBase64AsFile(data, characterName, "webp"); + const filename = `${characterName}_${humanizedDateTime()}`; + const base64Image = await saveBase64AsFile(data, characterName, filename, "webp"); callback ? callback(prompt, base64Image) : sendMessage(prompt, base64Image); } else { toastr.error('Image generation has failed. Please try again.'); diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index b7dc52de0..a2523378d 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -1169,15 +1169,18 @@ async function uploadGroupAvatar(event) { let thumbnail = await createThumbnail(croppedImage, 96, 144); //remove data:image/whatever;base64 thumbnail = thumbnail.replace(/^data:image\/[a-z]+;base64,/, ""); - let thumbnailUrl = await saveBase64AsFile(thumbnail, openGroupId.toString(), 'jpg'); + let _thisGroup = groups.find((x) => x.id == openGroupId); + // filename should be group id + human readable timestamp + const filename = `${_thisGroup.id}_${humanizedDateTime()}`; + let thumbnailUrl = await saveBase64AsFile(thumbnail, openGroupId.toString(), filename, 'jpg'); if (!openGroupId) { $('#group_avatar_preview img').attr('src', thumbnailUrl); $('#rm_group_restore_avatar').show(); return; } - let _thisGroup = groups.find((x) => x.id == openGroupId); - console.log(thumbnailUrl); + + _thisGroup.avatar_url = thumbnailUrl; $("#group_avatar_preview").empty().append(getGroupAvatar(_thisGroup)); $("#rm_group_restore_avatar").show(); diff --git a/public/scripts/utils.js b/public/scripts/utils.js index b5c6f4595..15c5029ef 100644 --- a/public/scripts/utils.js +++ b/public/scripts/utils.js @@ -565,7 +565,7 @@ export function extractDataFromPng(data, identifier = 'chara') { * @returns {Promise} - Resolves to the saved image's path on the server. * Rejects with an error if the upload fails. */ -export async function saveBase64AsFile(base64Data, characterName, ext) { +export async function saveBase64AsFile(base64Data, characterName, filename="", ext) { // Construct the full data URL const format = ext; // Extract the file extension (jpg, png, webp) const dataURL = `data:image/${format};base64,${base64Data}`; @@ -573,7 +573,8 @@ export async function saveBase64AsFile(base64Data, characterName, ext) { // Prepare the request body const requestBody = { image: dataURL, - ch_name: characterName + ch_name: characterName, + filename: filename }; // Send the data URL to your backend using fetch diff --git a/server.js b/server.js index 4af7ff0e3..62721ad6f 100644 --- a/server.js +++ b/server.js @@ -2655,7 +2655,11 @@ app.post('/uploadimage', jsonParser, async (request, response) => { const [, format, base64Data] = match; // Constructing filename and path - const filename = `${Date.now()}.${format}`; + let filename = `${Date.now()}.${format}`; + if(request.body.filename){ + filename = `${request.body.filename}.${format}`; + } + // if character is defined, save to a sub folder for that character let pathToNewFile = path.join(directories.userImages, filename); if(request.body.ch_name){