Merge pull request #17 from thisjam/dev

v1.31
pull/30/head
Six_GodK 2023-08-14 20:30:46 +08:00 committed by GitHub
commit 4e51ab0d2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 376 additions and 39 deletions

5
.gitignore vendored
View File

@ -1,6 +1,7 @@
/cache/*
/scripts/__pycache__/*
/scripts/__pycache__
/scripts/__pycache__/*
/scripts/__pycache__/
/yours/*
!/yours/.gitkeep
@ -8,7 +9,7 @@
*.swp
*.pyc
*.idea*
*__pycache__*

View File

@ -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]
---
##### 展示
![Image text](imgs/1.png)
![Image text](imgs/2.png)

BIN
imgs/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

View File

@ -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

File diff suppressed because one or more lines are too long

View File

@ -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