// ==UserScript==
// @name 通用ai插图脚本8
// @namespace http://tampermonkey.net/
// @version 11.3
// @license GPL
// @description 免费或者使用sd的api或使用novelai3配合ai生成插图
// @author 从前跟你一样
// @grant unsafeWindow
// @match *://*/*
// @require https://code.jquery.com/jquery-3.4.1.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// @connect vagrantup.com
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @connect *
// @connect 127.0.0.1
// @connect novelai.net
// @match *://*/*
// @description Save user settings
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// @downloadURL none
// ==/UserScript==
//开启脚本后点击酒馆左下角的三条杠,文生图设置,不需要修改脚步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
( function() {
'use strict';
let ster="";
let images="";
let imagesid="";
let db=""
let objectStorereadwrite="";
let objectStorereadonly="";
let xiancheng=true;
// 添加点击事件监听器到您的按钮或元素上
$(document).ready(function() {
ster= setInterval(addNewElement, 2000);
});
const dbName = 'tupian';
const dbVersion = 1;
const objectStoreName = 'tupianhuancun';
async function Storereadwrite(data){//使用数据库
const request = indexedDB.open(dbName, dbVersion);
request.onerror = function(event) {
console.error('Failed to open database:', event.target.error);
};
request.onsuccess = function(event) {
db = event.target.result;
const dbeadwrite = db.transaction([`${objectStoreName}`], 'readwrite');
objectStorereadwrite = dbeadwrite.objectStore(`${objectStoreName}`);
objectStorereadwrite.put(data);
};
request.onupgradeneeded = function(event) {
const db = event.target.result;
// 判断对象存储是否存在
if (!db.objectStoreNames.contains(objectStoreName)) {
// 如果对象存储不存在,则创建它
const objectStore = db.createObjectStore(objectStoreName, { keyPath: 'id' });
console.log('Object store created:', objectStoreName);
} else {
console.log('Object store already exists:', objectStoreName);
}
};
}
async function Storereadonly(id){//使用数据库
return new Promise((resolve, reject) => {
const request = indexedDB.open(dbName, dbVersion);
request.onerror = function(event) {
console.error('Failed to open database:', event.target.error);
};
request.onerror = function(event) {
reject(event.target.error);
};
request.onupgradeneeded = function(event) {
const db = event.target.result;
// 判断对象存储是否存在
if (!db.objectStoreNames.contains(objectStoreName)) {
// 如果对象存储不存在,则创建它
const objectStore = db.createObjectStore(objectStoreName, { keyPath: 'id' });
console.log('Object store created:', objectStoreName);
} else {
console.log('Object store already exists:', objectStoreName);
}
};
request.onsuccess = function(event) {
const db = event.target.result;
const dbreadonly = db.transaction([`${objectStoreName}`], 'readonly');
objectStorereadonly = dbreadonly.objectStore(`${objectStoreName}`);
const req =objectStorereadonly.get(id)
req.onsuccess = function(event) {
const data = event.target.result;
resolve(data);
};
};
});
}
async function Storedelete(id){//使用数据库
const request = indexedDB.open(dbName, dbVersion);
request.onerror = function(event) {
console.error('Failed to open database:', event.target.error);
};
request.onerror = function(event) {
reject(event.target.error);
};
request.onupgradeneeded = function(event) {
const db = event.target.result;
// 判断对象存储是否存在
if (!db.objectStoreNames.contains(objectStoreName)) {
// 如果对象存储不存在,则创建它
const objectStore = db.createObjectStore(objectStoreName, { keyPath: 'id' });
console.log('Object store created:', objectStoreName);
} else {
console.log('Object store already exists:', objectStoreName);
}
};
request.onsuccess = function(event) {
const db = event.target.result;
const dbreadonly = db.transaction([`${objectStoreName}`], 'readwrite');
const readwrite = dbreadonly.objectStore(`${objectStoreName}`);
readwrite.delete(id);
};
}
// 定义默认设置
const defaultSettings = {
scriptEnabled:false,
yushe:{"默认":{"fixedPrompt":'',"negativePrompt":''}},
yusheid:"默认",
mode: 'free',
freeMode:'flux-anime',
cache: "1",
sdUrl: 'http://localhost:7860',
novelaiApi: '000000',
startTag: 'image',
endTag: '}',
fixedPrompt: '',
nai3Scale: '10',
sdCfgScale: '7',
sm:false,
cfg_rescale:'0.18',
UCP:'bad proportions, out of focus, username, text, bad anatomy, lowres, worstquality, watermark, cropped, bad body, deformed, mutated, disfigured, poorly drawn face, malformed hands, extra arms, extra limb, missing limb, too many fingers, extra legs, bad feet, missing fingers, fused fingers, acnes, floating limbs, disconnected limbs, long neck, long body, mutation, ugly, blurry, low quality, sketches, normal quality, monochrome, grayscale, signature, logo, jpeg artifacts, unfinished, displeasing, chromatic aberration, extra digits, artistic error, scan, abstract, photo, realism, screencap',
AQT:'best quality, amazing quality, very aesthetic, absurdres',
steps: '28',
width: '1024',
height: '1024',
seed: '0',
restoreFaces: 'false',
samplerName: 'DPM++ 2M',
sampler:"k_euler",
negativePrompt: ''
};
let settings = {};
defaultSettings.yushe["默认"]={"negativePrompt":defaultSettings.negativePrompt,"fixedPrompt":defaultSettings.fixedPrompt};
for (const [key, defaultValue] of Object.entries(defaultSettings)) {
settings[key] = GM_getValue(key, defaultValue);
// 如果没有读取到值,就使用默认值并保存
if (settings[key] === defaultValue) {
if(key=="yushe"){
GM_setValue(key, JSON.stringify(defaultValue));//使用字符串保存
}else{
GM_setValue(key, defaultValue);
}
}else if(key=="yushe"){
console.log(settings);
settings[key]=JSON.parse(settings[key]);//转json
}
}
// settings["negativePrompt"]=settings["yushe"][settings.yusheid]["negativePrompt"];//设置提示词
// settings["fixedPrompt"]=settings["yushe"][settings.yusheid]["fixedPrompt"];
function addNewElement() {
const targetElement = document.querySelector('#option_toggle_AN');
if (targetElement) {
clearInterval(ster);
const newElement = document.createElement('a');
newElement.id = 'option_toggle_AN2';
const icon = document.createElement('i');
icon.className = 'fa-lg fa-solid fa-note-sticky';
newElement.appendChild(icon);
const span = document.createElement('span');
span.setAttribute('data-i18n', "打开设置");
span.textContent = '打开文生图设置';
newElement.appendChild(span);
// return true; // 表示操作成功完成
targetElement.parentNode.insertBefore(newElement, targetElement.nextSibling);
console.log("New element added successfully");
document.getElementById('option_toggle_AN2').addEventListener('click', showSettingsPanel);
}
}
function createSettingsPanel() {
const panel = document.createElement('div');
panel.id = 'settings-panel';
panel.style.position = 'absolute';
panel.style.top = '50%';
panel.style.left = '50%';
panel.style.transform = 'translate(-50%, -50%)';
panel.style.backgroundColor = 'black'; // 设置背景为黑色
panel.style.color = 'white';// 设置字体为白色
panel.style.padding = '20px';
panel.style.border = '1px solid white';// 设置边框为白色
panel.style.zIndex = '10000';
panel.style.display = 'none';
panel.style.overflowY = 'auto';
panel.style.maxHeight = '80vh';
let html = `
`;
html += `
设置面板
固定提示词设置: