diff --git a/public/scripts/extensions/stable-diffusion/index.js b/public/scripts/extensions/stable-diffusion/index.js index 579ca1cfa..3b1cc8276 100644 --- a/public/scripts/extensions/stable-diffusion/index.js +++ b/public/scripts/extensions/stable-diffusion/index.js @@ -383,11 +383,7 @@ async function generatePicture(_, trigger, message, callback) { console.log('Processed Stable Diffusion prompt:', prompt); - if (extension_settings.sd.horde) { - await generateHordeImage(prompt, callback); - } else { - await generateExtrasImage(prompt, callback); - } + await sendGenerationRequest(prompt, callback); } catch (err) { console.trace(err); throw new Error('SD prompt text generation failed.') @@ -398,6 +394,14 @@ async function generatePicture(_, trigger, message, callback) { } } +async function sendGenerationRequest(prompt, callback) { + if (extension_settings.sd.horde) { + await generateHordeImage(prompt, callback); + } else { + await generateExtrasImage(prompt, callback); + } +} + async function generateExtrasImage(prompt, callback) { const url = new URL(getApiUrl()); url.pathname = '/api/image'; @@ -547,24 +551,32 @@ addSDGenButtons(); setInterval(moduleWorker, UPDATE_INTERVAL); function sdMessageButton(e) { + const context = getContext(); const $mes = $(e.currentTarget).closest('.mes'); - const character = $mes.find('.name_text').text(), - message = $mes.find('.mes_text').text(); + const characterName = $mes.find('.name_text').text(); + const messageText = $mes.find('.mes_text').text(); + const message_id = $mes.attr('mesid'); + const message = context.chat[message_id]; + const hasSavedImage = message?.extra?.image && message?.extra?.title; - console.log("doing /sd raw last"); - generatePicture('sd', 'raw_last', `${character} said: ${message}`, saveGeneratedImage); + if (hasSavedImage) { + const prompt = message?.extra?.title; + console.log('Regenerating an image, using existing prompt:', prompt); + sendGenerationRequest(prompt, saveGeneratedImage); + } + else { + console.log("doing /sd raw last"); + generatePicture('sd', 'raw_last', `${characterName} said: ${messageText}`, saveGeneratedImage); + } function saveGeneratedImage(prompt, image) { - const context = getContext(); - const message_id = $mes.attr('mesid'); - const message = context.chat[message_id]; - // Some message sources may not create the extra object if (typeof message.extra !== 'object') { message.extra = {}; } - message.extra.inline_image = true; + // If already contains an image and it's not inline - leave it as is + message.extra.inline_image = message.extra.image && !message.extra.inline_image ? false : true; message.extra.image = image; message.extra.title = prompt; appendImageToMessage(message, $mes); diff --git a/public/style.css b/public/style.css index 0ff2eeb73..09bbc7ea1 100644 --- a/public/style.css +++ b/public/style.css @@ -3337,7 +3337,7 @@ a { display: none; flex-direction: row; justify-content: space-between; - padding: 0.75em; + padding: 1em; } .mes_img_controls .right_menu_button {