mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
#728 Refine mode for captioning plugin
This commit is contained in:
@@ -53,7 +53,9 @@ const extension_settings = {
|
|||||||
chara: [],
|
chara: [],
|
||||||
wiAddition: [],
|
wiAddition: [],
|
||||||
},
|
},
|
||||||
caption: {},
|
caption: {
|
||||||
|
refine_mode: false,
|
||||||
|
},
|
||||||
expressions: {},
|
expressions: {},
|
||||||
dice: {},
|
dice: {},
|
||||||
regex: [],
|
regex: [],
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import { getBase64Async } from "../../utils.js";
|
import { getBase64Async } from "../../utils.js";
|
||||||
import { getContext, getApiUrl, doExtrasFetch } from "../../extensions.js";
|
import { getContext, getApiUrl, doExtrasFetch, extension_settings } from "../../extensions.js";
|
||||||
|
import { callPopup, saveSettingsDebounced } from "../../../script.js";
|
||||||
export { MODULE_NAME };
|
export { MODULE_NAME };
|
||||||
|
|
||||||
const MODULE_NAME = 'caption';
|
const MODULE_NAME = 'caption';
|
||||||
@@ -33,7 +34,20 @@ async function setSpinnerIcon() {
|
|||||||
|
|
||||||
async function sendCaptionedMessage(caption, image) {
|
async function sendCaptionedMessage(caption, image) {
|
||||||
const context = getContext();
|
const context = getContext();
|
||||||
const messageText = `[${context.name1} sends ${context.name2 ?? ''} a picture that contains: ${caption}]`;
|
let messageText = `[${context.name1} sends ${context.name2 ?? ''} a picture that contains: ${caption}]`;
|
||||||
|
|
||||||
|
if (extension_settings.caption.refine_mode) {
|
||||||
|
messageText = await callPopup(
|
||||||
|
'<h3>Review and edit the generated message:</h3>Press "Cancel" to abort the caption sending.',
|
||||||
|
'input',
|
||||||
|
messageText,
|
||||||
|
{ rows: 5, okButton: 'Send' });
|
||||||
|
|
||||||
|
if (!messageText) {
|
||||||
|
throw new Error('User aborted the caption sending.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
name: context.name1,
|
name: context.name1,
|
||||||
is_user: true,
|
is_user: true,
|
||||||
@@ -42,12 +56,12 @@ async function sendCaptionedMessage(caption, image) {
|
|||||||
mes: messageText,
|
mes: messageText,
|
||||||
extra: {
|
extra: {
|
||||||
image: image,
|
image: image,
|
||||||
title: caption,
|
title: messageText,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
context.chat.push(message);
|
context.chat.push(message);
|
||||||
context.addOneMessage(message);
|
context.addOneMessage(message);
|
||||||
await context.generate();
|
await context.generate('caption');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onSelectImage(e) {
|
async function onSelectImage(e) {
|
||||||
@@ -88,6 +102,11 @@ async function onSelectImage(e) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onRefineModeInput() {
|
||||||
|
extension_settings.caption.refine_mode = $('#caption_refine_mode').prop('checked');
|
||||||
|
saveSettingsDebounced();
|
||||||
|
}
|
||||||
|
|
||||||
jQuery(function () {
|
jQuery(function () {
|
||||||
function addSendPictureButton() {
|
function addSendPictureButton() {
|
||||||
const sendButton = $(`
|
const sendButton = $(`
|
||||||
@@ -109,10 +128,32 @@ jQuery(function () {
|
|||||||
$('#form_sheld').append(imgForm);
|
$('#form_sheld').append(imgForm);
|
||||||
$('#img_file').on('change', onSelectImage);
|
$('#img_file').on('change', onSelectImage);
|
||||||
}
|
}
|
||||||
|
function addSettings() {
|
||||||
|
const html = `
|
||||||
|
<div class="background_settings">
|
||||||
|
<div class="inline-drawer">
|
||||||
|
<div class="inline-drawer-toggle inline-drawer-header">
|
||||||
|
<b>Image Captioning</b>
|
||||||
|
<div class="inline-drawer-icon fa-solid fa-circle-chevron-down down"></div>
|
||||||
|
</div>
|
||||||
|
<div class="inline-drawer-content">
|
||||||
|
<label class="checkbox_label" for="caption_refine_mode">
|
||||||
|
<input id="caption_refine_mode" type="checkbox" class="checkbox">
|
||||||
|
Edit captions before generation
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
$('#extensions_settings2').append(html);
|
||||||
|
}
|
||||||
|
|
||||||
|
addSettings();
|
||||||
addPictureSendForm();
|
addPictureSendForm();
|
||||||
addSendPictureButton();
|
addSendPictureButton();
|
||||||
setImageIcon();
|
setImageIcon();
|
||||||
moduleWorker();
|
moduleWorker();
|
||||||
|
$('#caption_refine_mode').prop('checked', !!(extension_settings.caption.refine_mode));
|
||||||
|
$('#caption_refine_mode').on('input', onRefineModeInput);
|
||||||
setInterval(moduleWorker, UPDATE_INTERVAL);
|
setInterval(moduleWorker, UPDATE_INTERVAL);
|
||||||
});
|
});
|
||||||
|
@@ -490,7 +490,7 @@ async function generatePrompt(quiet_prompt) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
if (extension_settings.sd.refine_mode) {
|
if (extension_settings.sd.refine_mode) {
|
||||||
const refinedPrompt = await callPopup('<h3>Review and edit the generated prompt:</h3>Press "Cancel" to abort the image generation.', 'input', reply, { rows: 5 });
|
const refinedPrompt = await callPopup('<h3>Review and edit the generated prompt:</h3>Press "Cancel" to abort the image generation.', 'input', reply, { rows: 5, okButton: 'Generate' });
|
||||||
|
|
||||||
if (refinedPrompt) {
|
if (refinedPrompt) {
|
||||||
reply = refinedPrompt;
|
reply = refinedPrompt;
|
||||||
|
Reference in New Issue
Block a user