commit
4e51ab0d2a
|
|
@ -1,6 +1,7 @@
|
|||
/cache/*
|
||||
/scripts/__pycache__/*
|
||||
/scripts/__pycache__
|
||||
/scripts/__pycache__/*
|
||||
/scripts/__pycache__/
|
||||
/yours/*
|
||||
!/yours/.gitkeep
|
||||
|
||||
|
|
@ -8,7 +9,7 @@
|
|||
*.swp
|
||||
*.pyc
|
||||
*.idea*
|
||||
*__pycache__*
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
15
README.md
15
README.md
|
|
@ -1,10 +1,15 @@
|
|||
|
||||
|
||||
# sd-webui-oldsix_prompt v1.3
|
||||
# sd-webui-oldsix_prompt v1.31
|
||||
### 新词库由群里小伙伴 @麻瓜 @万碎爷 @元一斤 整理
|
||||
### 100%完全自制插件,不是魔改别人,最近有个别up未均本人允许,在多个平台打着nsfw词库的旗号拿本插件吸粉入群,别人安装插件出问题又无法提供解决方案 ###
|
||||
### 本插件前前后后花了大半个月,阅读大量英文文档,研究了大量代码,最后才开发完成,觉得好用的可以给我点颗星。
|
||||
###
|
||||
#### 英文不好不用怕!彻底解决prompt对于国人不友好的痛点,整理了多个分类上千个提示词,无需英文快速输入提示词
|
||||
#### 词库会持续更新,觉得不错的点个start
|
||||
#### AI交流Q群875376246 各种疑难解答 帮你踩坑
|
||||
#### 词库会持续更新
|
||||
* AI交流Q群875376246 各种疑难解答 帮你踩坑
|
||||
* 已分好类别的词库,不会做太大改动,尽量不破坏大家的使用习惯
|
||||
|
||||
---
|
||||
### 安装方法
|
||||
* 方法1、复制地址到你的webui中 从网站安装后应用并重启
|
||||
|
|
@ -15,8 +20,10 @@
|
|||
---
|
||||
### 使用方法
|
||||
* 左键输入正向提示框、 右键输入负向提示框
|
||||
* 支持随机抽卡
|
||||
* 支持随机抽卡 【灵感模式、分类随机模式】
|
||||
* 支持动态提示词 本插件专属语法示例:#[red,blue,yellow]
|
||||
---
|
||||
##### 展示
|
||||

|
||||

|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 400 KiB |
|
|
@ -32,10 +32,9 @@ let dicClass={
|
|||
1:{}
|
||||
}
|
||||
|
||||
const loadTime=3000
|
||||
const loadTime=1500
|
||||
|
||||
|
||||
|
||||
|
||||
function getEle(key) {
|
||||
return gradioApp().querySelector(key)
|
||||
|
|
@ -134,16 +133,19 @@ function toggleNavCss(dom){
|
|||
|
||||
async function getJsonStr() {
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, loadTime));
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, loadTime));
|
||||
let val1 = document.querySelector("#oldsix-area1 textarea").value
|
||||
let val2 = document.querySelector("#oldsix-area2 textarea").value
|
||||
return val1||val2
|
||||
}
|
||||
|
||||
function clearTextarea(){
|
||||
document.querySelector("#oldsix-area1 textarea").value='area1'
|
||||
document.querySelector("#oldsix-area2 textarea").value='area2'
|
||||
let elarea1= document.querySelector("#oldsix-area1 textarea")
|
||||
let elarea2= document.querySelector("#oldsix-area2 textarea")
|
||||
elarea1.value=''
|
||||
elarea2.value=''
|
||||
updateInput(elarea1)
|
||||
updateInput(elarea2)
|
||||
}
|
||||
|
||||
function createBtnTitle(name,val,parent,pageindex){
|
||||
|
|
@ -158,8 +160,13 @@ function createBtnTitle(name,val,parent,pageindex){
|
|||
for (const key in val) {
|
||||
if (typeof val[key] != 'object' )
|
||||
btn.addEventListener('click', function () {
|
||||
addDicClasses(name,val,pageindex)
|
||||
})
|
||||
addDicClasses(name, val, pageindex)
|
||||
});
|
||||
btn.addEventListener('contextmenu', function (e) {
|
||||
e.preventDefault();
|
||||
addDynamicToTextArea(btn,pageindex)
|
||||
|
||||
})
|
||||
return div
|
||||
}
|
||||
|
||||
|
|
@ -167,9 +174,28 @@ function createBtnTitle(name,val,parent,pageindex){
|
|||
}
|
||||
|
||||
|
||||
function addDynamicToTextArea(btnele,pageindex){
|
||||
let btns= btnele.parentNode.querySelectorAll('.oldsix-btn')
|
||||
if(btns.length){
|
||||
let text='#['
|
||||
for (let index = 0; index < btns.length; index++) {
|
||||
text+=btns[index].dataset.sixoldtit
|
||||
if(index<btns.length-1){
|
||||
text+=','
|
||||
}
|
||||
|
||||
}
|
||||
text+=']';
|
||||
let elementprompt =pageindex==1 ? Elements.imgpromt : Elements.txtpromt
|
||||
InserttextToTextArea(elementprompt,text)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function addDicClasses(key,val,pageindex)
|
||||
{
|
||||
if(dicClass[pageindex][key]){
|
||||
if(dicClass[pageindex][key]){
|
||||
return
|
||||
}
|
||||
let list=[]
|
||||
|
|
@ -207,14 +233,14 @@ function createBtnPrompt(key,val,parent,pageindex){
|
|||
btn.dataset.sixoldtit=val
|
||||
btn.dataset.pageindex=pageindex
|
||||
parent.appendChild(btn)
|
||||
btn.addEventListener('click',function(e){
|
||||
|
||||
btn.addEventListener('click',function(e){
|
||||
addPrompt(e)
|
||||
})
|
||||
btn.addEventListener('contextmenu', function (e) {
|
||||
e.preventDefault();
|
||||
addNPrompt(e)
|
||||
})
|
||||
|
||||
|
||||
return btn
|
||||
}
|
||||
|
|
@ -260,7 +286,8 @@ function tabClick(self){
|
|||
|
||||
}
|
||||
function reloadNodes(jsonstring, btnreloadDom) {
|
||||
let jsonObj = JSON.parse(jsonstring)
|
||||
|
||||
let jsonObj = JSON.parse(jsonstring)
|
||||
let tabs = document.createElement('div')
|
||||
let tabnav = document.createElement('div')
|
||||
let contentContainer=document.createElement('div')
|
||||
|
|
@ -295,9 +322,10 @@ function reloadNodes(jsonstring, btnreloadDom) {
|
|||
|
||||
async function loadCustomUI(){
|
||||
let jsonstr= await getJsonStr()
|
||||
if (jsonstr) {
|
||||
reloadNodes(jsonstr, Elements.btnReload[0])
|
||||
reloadNodes(jsonstr, Elements.btnReload[1])
|
||||
if (jsonstr) {
|
||||
reloadNodes(jsonstr, Elements.btnReload[0])
|
||||
reloadNodes(jsonstr, Elements.btnReload[1])
|
||||
clearTextarea()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -370,7 +398,12 @@ function loadClearbtn(){
|
|||
}
|
||||
|
||||
|
||||
function ranDomPropt(pageindex){
|
||||
function ranDomPropt(pageindex){
|
||||
if(JSON.stringify(dicClass[pageindex]) == "{}"){
|
||||
|
||||
alert('请先添加分类')
|
||||
return
|
||||
}
|
||||
let texten=''
|
||||
let textzh=''
|
||||
for (const key in dicClass[pageindex]) {
|
||||
|
|
@ -381,7 +414,7 @@ function ranDomPropt(pageindex){
|
|||
textzh+=rdtarget.key+','
|
||||
}
|
||||
Elements.RdtxtAreasZh[pageindex].value=textzh
|
||||
Elements.RdtxtAreasEn[pageindex].value=Elements.txtStart[pageindex].value+texten+Elements.txtEnd[pageindex].value
|
||||
Elements.RdtxtAreasEn[pageindex].value=texten
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -404,7 +437,7 @@ onUiLoaded(async => {
|
|||
Elements.btnRandoms.forEach((item,index) => {
|
||||
item.addEventListener('click', () => {
|
||||
ranDomPropt(index)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Elements.btnReload.forEach((item,index) => {
|
||||
|
|
@ -420,6 +453,7 @@ onUiLoaded(async => {
|
|||
elementprompt.value=''
|
||||
elementprompt.focus();
|
||||
let str=Elements.RdtxtAreasEn[index].value
|
||||
str=Elements.txtStart[index].value+str+Elements.txtEnd[index].value
|
||||
document.execCommand('insertText', false,str);
|
||||
})
|
||||
})
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
274
json/03服饰.json
274
json/03服饰.json
File diff suppressed because one or more lines are too long
Binary file not shown.
|
|
@ -3,6 +3,7 @@ import gradio as gr
|
|||
import os,json
|
||||
import json
|
||||
import random
|
||||
import re
|
||||
|
||||
current_script = os.path.realpath(__file__)
|
||||
current_folder = os.path.dirname(current_script)
|
||||
|
|
@ -18,7 +19,8 @@ def LoadTagsFile():
|
|||
|
||||
def loadjsonfiles(path,dic):
|
||||
files = os.listdir( path )
|
||||
for item in files:
|
||||
sorted_files = sorted(files)
|
||||
for item in sorted_files:
|
||||
if item.endswith(".json"):
|
||||
filepath=path+'/'+item
|
||||
filename=filepath[filepath.rindex('/') + 1:-5]
|
||||
|
|
@ -62,7 +64,7 @@ class Script(scripts.Script):
|
|||
eid='oldsix-prompt1'
|
||||
tid='oldsix-area1'
|
||||
with gr.Row(elem_id=eid):
|
||||
with gr.Accordion(label="SixGod_K提示词",open=False):
|
||||
with gr.Accordion(label="SixGod_K提示词 v1.31",open=False):
|
||||
textarea=gr.TextArea(self.json,elem_id=tid,visible=False)
|
||||
with gr.Column(scale=4,elem_id="oldsix-optit"):
|
||||
btnreload=gr.Button('🔄',elem_classes="oldsix-reload sm secondary gradio-button svelte-1ipelgc")
|
||||
|
|
@ -75,9 +77,9 @@ class Script(scripts.Script):
|
|||
rdtextareaZh=gr.TextArea(label='预览框',elem_id='randomTextZh',lines=3)
|
||||
with gr.Row():
|
||||
with gr.Column(scale=4):
|
||||
gr.Textbox(placeholder='开头占位提示词',show_label=False,elem_classes="oldsix-txt-start")
|
||||
txtstart=gr.Textbox(placeholder='开头占位提示词',show_label=False,elem_classes="oldsix-txt-start")
|
||||
with gr.Column(scale=4):
|
||||
gr.Textbox(placeholder='结尾占位提示词',show_label=False,elem_classes="oldsix-txt-end")
|
||||
txtend=gr.Textbox(placeholder='结尾占位提示词',show_label=False,elem_classes="oldsix-txt-end")
|
||||
with gr.Row():
|
||||
with gr.Column(scale=4):
|
||||
btnRandom=gr.Button('随机灵感关键词',variant="primary")
|
||||
|
|
@ -88,22 +90,43 @@ class Script(scripts.Script):
|
|||
|
||||
|
||||
def randomPrompt():
|
||||
self.randomIndex= random.randint(0,len(self.rdlist))
|
||||
return [self.rdlist[self.randomIndex]['val'],self.rdlist[self.randomIndex]['key']]
|
||||
random.seed(getSeed())
|
||||
self.randomIndex= random.randint(0,len(self.rdlist)-1)
|
||||
rden=self.rdlist[self.randomIndex]['key']
|
||||
return [self.rdlist[self.randomIndex]['val'],rden]
|
||||
def reloadData():
|
||||
return LoadTagsFile()
|
||||
|
||||
|
||||
btnreload.click(fn=reloadData,inputs=None,outputs=textarea)
|
||||
btnRandom.click(fn=randomPrompt,inputs=None,outputs=[rdtextareaEn,rdtextareaZh])
|
||||
|
||||
|
||||
|
||||
|
||||
return [btnreload]
|
||||
|
||||
# def process(self, p, *args):
|
||||
# pass
|
||||
def process(self, p, *args):
|
||||
rdtext= extract_hash_tags(p.prompt)
|
||||
if(rdtext):
|
||||
for i in range(len(p.all_prompts)):
|
||||
p.all_prompts[i]=rdtext
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def extract_hash_tags(text):
|
||||
pattern = r'#\[(.*?)\]'
|
||||
matches = re.findall(pattern, text)
|
||||
if(len(matches)==0) :
|
||||
return None
|
||||
for item in matches:
|
||||
arr=item.split(',')
|
||||
random.seed(getSeed())
|
||||
rdindex=random.randint(0,len(arr)-1)
|
||||
rdtext=arr[rdindex]
|
||||
text = re.sub(pattern, rdtext, text,count=1)
|
||||
|
||||
return text
|
||||
|
||||
def getSeed():
|
||||
seed = random.random()
|
||||
return seed
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue