// ==UserScript== // @name 测试2 // @namespace http://tampermonkey.net/ // @version 2 // @license GPL // @description 测试 // @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; let nai3cankaotupian=""; let comfyuicankaotupian=""; let json=`{ "2": { "inputs": { "stop_at_clip_layer": -2, "clip": [ "20", 1 ] }, "class_type": "CLIPSetLastLayer", "_meta": { "title": "CLIP设置停止层" } }, "5": { "inputs": { "seed": "%seed%", "steps": "%steps%", "cfg": "%cfg_scale%", "sampler_name": "%sampler_name%", "scheduler": "karras", "denoise": 1, "model": [ "158", 0 ], "positive": [ "158", 1 ], "negative": [ "59", 0 ], "latent_image": [ "6", 0 ] }, "class_type": "KSampler", "_meta": { "title": "K采样器" } }, "6": { "inputs": { "width": "%width%", "height": "%height%", "batch_size": 1 }, "class_type": "EmptyLatentImage", "_meta": { "title": "空Latent" } }, "20": { "inputs": { "ckpt_name": "%MODEL_NAME%" }, "class_type": "CheckpointLoaderSimple", "_meta": { "title": "Checkpoint加载器(简易)" } }, "31": { "inputs": { "samples": [ "5", 0 ], "vae": [ "20", 2 ] }, "class_type": "VAEDecode", "_meta": { "title": "VAE解码" } }, "59": { "inputs": { "text": "%negative_prompt%", "speak_and_recognation": true, "clip": [ "2", 0 ] }, "class_type": "CLIPTextEncode", "_meta": { "title": "CLIP文本编码器" } }, "122": { "inputs": { "filename_prefix": "lowres_MANGURI", "images": [ "31", 0 ] }, "class_type": "SaveImage", "_meta": { "title": "保存图像" } }, "158": { "inputs": { "positive": "%prompt%", "打开可视化PromptUI": "", "speak_and_recognation": true, "model": [ "20", 0 ], "clip": [ "2", 0 ] }, "class_type": "WeiLinComfyUIPromptToLorasOnly", "_meta": { "title": "WeiLin 正向提示词Lora自动加载" } } }`; let json2=`{ "3": { "inputs": { "seed": "%seed%", "steps": "%steps%", "cfg": "%cfg_scale%", "sampler_name": "%sampler_name%", "scheduler": "karras", "denoise": 1, "model": [ "15", 0 ], "positive": [ "20", 1 ], "negative": [ "7", 0 ], "latent_image": [ "19", 0 ] }, "class_type": "KSampler", "_meta": { "title": "K采样器" } }, "4": { "inputs": { "ckpt_name": "%MODEL_NAME%" }, "class_type": "CheckpointLoaderSimple", "_meta": { "title": "Checkpoint加载器(简易)" } }, "7": { "inputs": { "text": "%negative_prompt%", "speak_and_recognation": true, "clip": [ "4", 1 ] }, "class_type": "CLIPTextEncode", "_meta": { "title": "CLIP文本编码器" } }, "8": { "inputs": { "samples": [ "3", 0 ], "vae": [ "4", 2 ] }, "class_type": "VAEDecode", "_meta": { "title": "VAE解码" } }, "23": { "inputs": { "filename_prefix": "ComfyUI", "images": [ "8", 0 ] }, "class_type": "SaveImage", "_meta": { "title": "保存图像" } }, "13": { "inputs": { "preset": "%ipa%", "model": [ "20", 0 ] }, "class_type": "IPAdapterUnifiedLoader", "_meta": { "title": "IPAdapter加载器" } }, "14": { "inputs": { "image": "%comfyuicankaotupian%", "upload": "image" }, "class_type": "LoadImage", "_meta": { "title": "加载图像" } }, "15": { "inputs": { "weight": "%c_quanzhong%", "weight_faceidv2": "%c_idquanzhong%", "weight_type": "style and composition", "combine_embeds": "concat", "start_at": 0, "end_at": 1, "embeds_scaling": "K+mean(V) w/ C penalty", "layer_weights": "0:0, 1:0, 2:0, 3:"%c_xijie%", 4:0, 5:0, 6:"%c_fenwei%", 7:0, 8:0, 9:0, 10:0", "speak_and_recognation": true, "model": [ "13", 0 ], "ipadapter": [ "13", 1 ], "image": [ "14", 0 ] }, "class_type": "IPAdapterMS", "_meta": { "title": "应用IPAdapter Mad Scientist" } }, "19": { "inputs": { "width": "%width%", "height": "%height%", "batch_size": 1 }, "class_type": "EmptyLatentImage", "_meta": { "title": "空Latent" } }, "20": { "inputs": { "positive": "%prompt%", "打开可视化PromptUI": "", "speak_and_recognation": true, "model": [ "4", 0 ], "clip": [ "4", 1 ] }, "class_type": "WeiLinComfyUIPromptToLorasOnly", "_meta": { "title": "WeiLin 正向提示词Lora自动加载" } } }` let json3=`{ "3": { "inputs": { "seed": "%seed%", "steps": "%steps%", "cfg": "%cfg_scale%", "sampler_name": "%sampler_name%", "scheduler": "karras", "denoise": 1, "model": [ "39", 0 ], "positive": [ "39", 1 ], "negative": [ "7", 0 ], "latent_image": [ "5", 0 ] }, "class_type": "KSampler", "_meta": { "title": "K采样器" } }, "5": { "inputs": { "width": "%width%", "height": "%height%", "batch_size": 1 }, "class_type": "EmptyLatentImage", "_meta": { "title": "空Latent" } }, "7": { "inputs": { "text": "%negative_prompt%", "speak_and_recognation": true, "clip": [ "14", 1 ] }, "class_type": "CLIPTextEncode", "_meta": { "title": "CLIP文本编码器" } }, "8": { "inputs": { "samples": [ "3", 0 ], "vae": [ "14", 2 ] }, "class_type": "VAEDecode", "_meta": { "title": "VAE解码" } }, "14": { "inputs": { "ckpt_name": "%MODEL_NAME%" }, "class_type": "CheckpointLoaderSimple", "_meta": { "title": "Checkpoint加载器(简易)" } }, "23": { "inputs": { "model_name": "bbox/face_yolov8m.pt" }, "class_type": "UltralyticsDetectorProvider", "_meta": { "title": "检测加载器" } }, "25": { "inputs": { "model_name": "sam_vit_b_01ec64.pth", "device_mode": "AUTO" }, "class_type": "SAMLoader", "_meta": { "title": "SAM加载器" } }, "26": { "inputs": { "model_name": "segm/person_yolov8m-seg.pt" }, "class_type": "UltralyticsDetectorProvider", "_meta": { "title": "检测加载器" } }, "30": { "inputs": { "filename_prefix": "ComfyUI", "images": [ "35", 0 ] }, "class_type": "SaveImage", "_meta": { "title": "保存图像" } }, "35": { "inputs": { "guide_size": 512, "guide_size_for": true, "max_size": 1024, "seed": "%seed%", "steps": "%steps%", "cfg": "%cfg_scale%", "sampler_name": "%sampler_name%", "scheduler": "normal", "denoise": 0.5, "feather": 5, "noise_mask": true, "force_inpaint": true, "bbox_threshold": 0.5, "bbox_dilation": 10, "bbox_crop_factor": 3, "sam_detection_hint": "center-1", "sam_dilation": 0, "sam_threshold": 0.93, "sam_bbox_expansion": 0, "sam_mask_hint_threshold": 0.7000000000000001, "sam_mask_hint_use_negative": "False", "drop_size": 10, "wildcard": "", "cycle": 1, "inpaint_model": false, "noise_mask_feather": 20, "speak_and_recognation": true, "image": [ "8", 0 ], "model": [ "39", 0 ], "clip": [ "14", 1 ], "vae": [ "14", 2 ], "positive": [ "39", 1 ], "negative": [ "7", 0 ], "bbox_detector": [ "23", 0 ], "sam_model_opt": [ "25", 0 ], "segm_detector_opt": [ "26", 1 ] }, "class_type": "FaceDetailer", "_meta": { "title": "面部细化" } }, "39": { "inputs": { "positive": "%prompt%", "打开可视化PromptUI": "", "speak_and_recognation": true, "model": [ "14", 0 ], "clip": [ "14", 1 ] }, "class_type": "WeiLinComfyUIPromptToLorasOnly", "_meta": { "title": "WeiLin 正向提示词Lora自动加载" } } }` // 添加点击事件监听器到您的按钮或元素上 $(document).ready(function() { ster= setInterval(addNewElement, 2000); const style1 = document.createElement('style'); style1.textContent = ` .button_image { /* 基础样式 */ padding: 3px 4px; font-size: 13px; font-weight: 600; color: #ffffff; background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); border: none; border-radius: 2px; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 4px 6px rgba(99, 102, 241, 0.2); /* 文本和图标布局 */ display: inline-flex; align-items: center; gap: 8px; /* 防止文本换行 */ white-space: nowrap; /* 去除默认按钮样式 */ outline: none; -webkit-appearance: none; -moz-appearance: none; } `; document.head.appendChild(style1); }); 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:"true", dyn:'true', 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', comfyuisamplerName: 'euler_ancestral', sampler:"k_euler", negativePrompt: '', zidongdianji:"true", nai3VibeTransfer: "false", InformationExtracted:'0.3', ReferenceStrength:"0.6", nai3Deceisp:"true", nai3Variety:"true", Schedule:"native", MODEL_NAME: "不带后缀例如tPonynai3_v65", c_fenwei:"0.8", c_xijie:"0.8", c_idquanzhong:"1.10", c_quanzhong:"0.8", ipa:"STANDARD (medium strength)", dbclike:"false", workers:{"默认":json,"默认人物一致":json2,"面部细化":json3}, workerid:"默认", worker:json, novelaimode:"nai-diffusion-3" }; 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]=="image:{"){ //版本更新数据 // if(key=="startTag"){ // settings[key]="image###"; // } // } // if(settings[key]=="}"){ //版本更新数据 // if(key=="endTag"){ // settings[key]="###"; // } // } // 如果没有读取到值,就使用默认值并保存 if (settings[key] === defaultValue) { if(key=="yushe"||key=="workers"||key=="worker"){ GM_setValue(key, JSON.stringify(defaultValue));//使用字符串保存 }else{ GM_setValue(key, defaultValue); } }else if(key=="yushe"||key=="workers"){ console.log(settings); try { settings[key]=JSON.parse(settings[key]);//转json if(key=="workers"){ settings['workers']["默认"]=json; settings['workers']["默认人物一致"]=json2; settings['workers']["面部细化"]=json3; } } catch (error) { settings["workers"]={"默认":json,"默认人物一致":json2,"面部细化":json3} settings.workerid="默认"; } } } settings.worker=settings["workers"][settings.workerid];//设置提示词 // 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); /*******工具 */ const newElement2 = document.createElement('a'); newElement2.id = 'option_toggle_AN3'; const icon2 = document.createElement('i'); icon2.className = 'fa-lg fa-solid fa-note-sticky'; newElement2.appendChild(icon2); const span2 = document.createElement('span'); span2.setAttribute('data-i18n', "打开设置"); span2.textContent = '打开酒馆工具设置'; newElement2.appendChild(span2); // return true; // 表示操作成功完成 targetElement.parentNode.insertBefore(newElement2, targetElement.nextSibling); console.log("New element added successfully2"); document.getElementById('option_toggle_AN3').addEventListener('click', showSettingsPanel2); } } 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 += `

设置面板






` if(settings.mode === 'comfyui'){ html += `

`} if(settings.mode === 'comfyui'){ html +=`
工作流设置:



` } html +=`



` if(settings.mode === 'comfyui'){ html += `


` } html += `


` if(settings.mode === 'novelai'){ html += `


` } html += `



` if(settings.mode === 'sd'|| settings.mode === 'comfyui'){ html += `
` } if(settings.mode === 'sd'){ html += `

` } html += ` ` if(settings.mode === 'novelai'){ html += `