Add post-processing zoom for generated tags, generate records for images without exif data, and remove Lora from the quick move.

pull/63/head
zanllp 2023-05-01 03:07:34 +08:00
parent 2a335f7d22
commit eb1dd6208b
27 changed files with 137 additions and 97 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ iib.db
tags-translate.csv
launch.sh
conf.json
iib.db-journal

View File

@ -8,7 +8,7 @@
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-a52af617.js"></script>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-1bf3235b.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-29c71e71.css">
</head>

View File

@ -15,13 +15,16 @@ from scripts.logger import logger
# 定义一个函数来获取图片文件的EXIF数据
def get_exif_data(file_path):
info = ''
params = None
try:
with Image.open(file_path) as img:
info = read_info_from_image(img)
return parse_generation_parameters(info), info
params = parse_generation_parameters(info)
except Exception as e:
if is_dev:
logger.error("get_exif_data %s", e)
return params, info
def update_image_data(search_dirs: List[str]):
@ -48,18 +51,18 @@ def update_image_data(search_dirs: List[str]):
elif is_valid_image_path(file_path):
if DbImg.get(conn, file_path): # 已存在的跳过
continue
exif_data = get_exif_data(file_path)
if not exif_data:
continue
exif, lora, pos, _ = exif_data[0]
parsed_params, info = get_exif_data(file_path)
img = DbImg(
file_path,
exif_data[1],
info,
os.path.getsize(file_path),
get_modified_date(file_path),
)
img.save(conn)
if not parsed_params:
continue
exif, lora, pos, _ = parsed_params
size_tag = Tag.get_or_create(
conn,
str(exif.get("Size-1", 0)) + " * " + str(exif.get("Size-2", 0)),
@ -67,11 +70,16 @@ def update_image_data(search_dirs: List[str]):
)
safe_save_img_tag(ImageTag(img.id, size_tag.id))
for k in ["Model", "Sampler"]:
for k in [
"Model",
"Sampler",
"Postprocess upscale by",
"Postprocess upscaler",
]:
v = exif.get(k)
if not v:
continue
tag = Tag.get_or_create(conn, str(v), k)
tag = Tag.get_or_create(conn, str(v), k)
safe_save_img_tag(ImageTag(img.id, tag.id))
for i in lora:
tag = Tag.get_or_create(conn, i["name"], "lora")

View File

@ -14,27 +14,31 @@ def human_readable_size(size_bytes):
Converts bytes to a human-readable format.
"""
# define the size units
units = ('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB')
units = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
# calculate the logarithm of the input value with base 1024
size = int(size_bytes)
if size == 0:
return '0B'
return "0B"
i = 0
while size >= 1024 and i < len(units) - 1:
size /= 1024
i += 1
# round the result to two decimal points and return as a string
return '{:.2f} {}'.format(size, units[i])
return "{:.2f} {}".format(size, units[i])
def get_windows_drives():
drives = []
for drive in range(ord('A'), ord('Z')+1):
drive_name = chr(drive) + ':/'
for drive in range(ord("A"), ord("Z") + 1):
drive_name = chr(drive) + ":/"
if os.path.exists(drive_name):
drives.append(drive_name)
return drives
pattern = re.compile(r'(\d+\.?\d*)([KMGT]?B)', re.IGNORECASE)
pattern = re.compile(r"(\d+\.?\d*)([KMGT]?B)", re.IGNORECASE)
def convert_to_bytes(file_size_str):
match = re.match(pattern, file_size_str)
if match:
@ -52,16 +56,17 @@ def convert_to_bytes(file_size_str):
return int(size)
else:
raise ValueError(f"Invalid file size string '{file_size_str}'")
import asyncio
def debounce(delay):
"""用于优化高频事件的装饰器"""
def decorator(func):
from typing import Union
task: Union[None, asyncio.Task] = None
async def debounced(*args, **kwargs):
@ -101,7 +106,9 @@ def get_temp_path():
temp_path = None
try:
# 尝试获取系统环境变量中的临时文件目录路径
temp_path = os.environ.get('TMPDIR') or os.environ.get('TMP') or os.environ.get('TEMP')
temp_path = (
os.environ.get("TMPDIR") or os.environ.get("TMP") or os.environ.get("TEMP")
)
except Exception as e:
print("获取系统环境变量临时文件目录路径失败,错误信息:", e)
@ -121,87 +128,106 @@ def get_temp_path():
return temp_path
temp_path = get_temp_path()
def get_locale():
import locale
lang, _ = locale.getdefaultlocale()
return 'zh' if lang and lang.startswith('zh') else 'en'
return "zh" if lang and lang.startswith("zh") else "en"
locale = get_locale()
def get_modified_date(folder_path: str):
return datetime.fromtimestamp(os.path.getmtime(folder_path)).strftime('%Y-%m-%d %H:%M:%S')
return datetime.fromtimestamp(os.path.getmtime(folder_path)).strftime(
"%Y-%m-%d %H:%M:%S"
)
def unique_by(seq, key_func):
seen = set()
return [x for x in seq if not (key := key_func(x)) in seen and not seen.add(key)]
def read_info_from_image(image) -> str:
def read_info_from_image(image) -> str:
items = image.info or {}
geninfo = items.pop('parameters', None)
geninfo = items.pop("parameters", None)
if "exif" in items:
exif = piexif.load(items["exif"])
exif_comment = (exif or {}).get("Exif", {}).get(piexif.ExifIFD.UserComment, b'')
exif_comment = (exif or {}).get("Exif", {}).get(piexif.ExifIFD.UserComment, b"")
try:
exif_comment = piexif.helper.UserComment.load(exif_comment)
except ValueError:
exif_comment = exif_comment.decode('utf8', errors="ignore")
exif_comment = exif_comment.decode("utf8", errors="ignore")
if exif_comment:
items['exif comment'] = exif_comment
items["exif comment"] = exif_comment
geninfo = exif_comment
return geninfo
re_param_code = r'\s*([\w ]+):\s*("(?:\\"[^,]|\\"|\\|[^\"])+"|[^,]*)(?:,|$)'
re_param = re.compile(re_param_code)
re_imagesize = re.compile(r"^(\d+)x(\d+)$")
re_lora_prompt = re.compile("<lora:([\w_\s]+):([\d.]+)>")
re_parens = re.compile(r'[\\/\[\](){}]+')
re_parens = re.compile(r"[\\/\[\](){}]+")
re_lora_extract = re.compile(r"([\w_\s]+)(?:\d+)?")
def lora_extract(lora:str):
def lora_extract(lora: str):
"""
提取yoshino yoshino(2a79aa5adc4a)
"""
res = re_lora_extract.match(lora)
return res.group(1) if res else lora
return res.group(1) if res else lora
def parse_prompt(x:str):
x = re.sub(re_parens, '', x.lower().replace('',',').replace('-',' ').replace('_', ' '))
tag_list = [x.strip() for x in x.split(',')]
def parse_prompt(x: str):
x = re.sub(
re_parens, "", x.lower().replace("", ",").replace("-", " ").replace("_", " ")
)
tag_list = [x.strip() for x in x.split(",")]
res = []
lora_list = []
for tag in tag_list:
if len(tag) == 0:
continue
idx_colon = tag.find(':')
idx_colon = tag.find(":")
if idx_colon != -1:
lora_res = re.match(re_lora_prompt, tag)
if lora_res:
lora_list.append({ "name": lora_res.group(1), "value": float(lora_res.group(2))})
lora_list.append(
{"name": lora_res.group(1), "value": float(lora_res.group(2))}
)
else:
tag = tag[0:idx_colon]
if len(tag):
res.append(tag)
tag = tag[0:idx_colon]
if len(tag):
res.append(tag)
else:
res.append(tag)
return res, lora_list
def parse_generation_parameters(x: str):
res = {}
prompt = ""
negative_prompt = ""
done_with_prompt = False
if not x:
return {},[],[],[]
return {}, [], [], []
*lines, lastline = x.strip().split("\n")
if len(re_param.findall(lastline)) < 3:
lines.append(lastline)
lastline = ''
lastline = ""
if len(lines) == 1 and lines[0].startswith("Postprocess"): # 把上面改成<2应该也可以当时不敢动
lastline = lines[
0
] # 把Postprocess upscale by: 4, Postprocess upscaler: R-ESRGAN 4x+ Anime6B 推到res解析
lines = []
for i, line in enumerate(lines):
line = line.strip()
if line.startswith("Negative prompt:"):
@ -213,35 +239,38 @@ def parse_generation_parameters(x: str):
else:
prompt += ("" if prompt == "" else "\n") + line
#res["pos_prompt"] = prompt
#res["neg_prompt"] = negative_prompt
for k, v in re_param.findall(lastline):
v = v[1:-1] if v[0] == '"' and v[-1] == '"' else v
m = re_imagesize.match(v)
if m is not None:
res[k+"-1"] = m.group(1)
res[k+"-2"] = m.group(2)
res[k + "-1"] = m.group(1)
res[k + "-2"] = m.group(2)
else:
res[k] = v
pos_prompt, lora = parse_prompt(prompt)
neg_prompt = [] # parse_prompt(negative_prompt)[0]
for k in res:
k_s = str(k)
if k_s.startswith("AddNet Module") and str(res[k]).lower() == "lora":
model = res[k_s.replace("Module", "Model")]
value = res.get(k_s.replace("Module", "Weight A"), "1")
lora.append({ "name": lora_extract(model), "value": float(value) })
return res, unique_by(lora, lambda x:x['name']), unique_by(pos_prompt, lambda x:x), unique_by(neg_prompt, lambda x:x)
lora.append({"name": lora_extract(model), "value": float(value)})
return (
res,
unique_by(lora, lambda x: x["name"]),
unique_by(pos_prompt, lambda x: x),
[],
)
tags_translate: Dict[str, str] = {}
try:
import codecs
with codecs.open(os.path.join(cwd, 'tags-translate.csv'), "r", "utf-8") as tag:
with codecs.open(os.path.join(cwd, "tags-translate.csv"), "r", "utf-8") as tag:
tags_translate_str = tag.read()
for line in tags_translate_str.splitlines():
en,mapping = line.split(',')
en, mapping = line.split(",")
tags_translate[en.strip()] = mapping.strip()
except Exception as e:
pass

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{d as A,r as k,B,C as F,y as G,o as N,l as U,c as l,m as o,n as s,p as w,q as x,t as y,I as $,aQ as q,a0 as D,V as E}from"./index-a52af617.js";import{u as Q,b as R,g as O,e as j,c as H,j as J,k as K,t as L,S as P}from"./FileItem-1685864d.js";import{g as W,M as X}from"./db-86011ee4.js";import"./index-f3d83b70.js";import"./_baseIteratee-4a6b4f10.js";import"./button-4d75a231.js";const Y={class:"hint"},Z=A({__name:"MatchedImageGrid",props:{tabIdx:null,paneIdx:null,selectedTagIds:null,id:null},setup(h){const u=h,n=k(),m=B(new F(-1,0,-1,"throw"));G(()=>u.selectedTagIds,async()=>{var e;const{res:a}=m.pushAction(()=>W(u.selectedTagIds));n.value=await a,(e=p.value)==null||e.scrollToItem(0)},{immediate:!0});const p=k(),f={tabIdx:-1,target:"local",paneIdx:-1},{stackViewEl:b,multiSelectedIdxs:g}=Q().toRefs(),{itemSize:v,gridItems:M}=R(f),{showMenuIdx:c}=O(),{showGenInfo:d,imageGenInfo:I,q:C,onContextMenuClick:S}=j(f,{openNext:q}),T=async(a,e,i)=>{if(await S(a,e,i),a.key==="deleteFiles"){const r=g.value.includes(i)?g.value:[i];n.value=n.value.filter((_,t)=>!r.includes(t))}};return(a,e)=>{const i=D,r=X,_=P;return N(),U("div",{class:"container",ref_key:"stackViewEl",ref:b},[l(_,{size:"large",spinning:!m.isIdle},{default:o(()=>[l(r,{visible:s(d),"onUpdate:visible":e[1]||(e[1]=t=>w(d)?d.value=t:null),width:"70vw","mask-closable":"",onOk:e[2]||(e[2]=t=>d.value=!1)},{cancelText:o(()=>[]),default:o(()=>[l(i,{active:"",loading:!s(C).isIdle},{default:o(()=>[x("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:e[0]||(e[0]=t=>s(H)(s(I),"copied"))},[x("div",Y,y(a.$t("doubleClickToCopy")),1),$(" "+y(s(I)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),l(s(J),{ref_key:"scroller",ref:p,class:"file-list",items:n.value||[],"item-size":s(v).first,"key-field":"fullpath","item-secondary-size":s(v).second,gridItems:s(M)},{default:o(({item:t,index:z})=>[l(K,{idx:z,file:t,"show-menu-idx":s(c),"onUpdate:showMenuIdx":e[3]||(e[3]=V=>w(c)?c.value=V:null),"full-screen-preview-image-url":s(L)(t),onContextMenuClick:T},null,8,["idx","file","show-menu-idx","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])]),_:1},8,["spinning"])],512)}}});const oe=E(Z,[["__scopeId","data-v-e4f22d78"]]);export{oe as default};
import{d as A,r as k,B,C as F,y as G,o as N,l as U,c as l,m as o,n as s,p as w,q as x,t as y,J as $,aQ as q,a0 as D,V as E}from"./index-1bf3235b.js";import{u as Q,b as R,g as O,e as j,c as H,j as J,k as K,t as L,S as P}from"./FileItem-d840d6c4.js";import{g as W,M as X}from"./db-85f44d87.js";import"./index-b86708ae.js";import"./_baseIteratee-f82bf799.js";import"./button-142d9500.js";const Y={class:"hint"},Z=A({__name:"MatchedImageGrid",props:{tabIdx:null,paneIdx:null,selectedTagIds:null,id:null},setup(h){const u=h,n=k(),m=B(new F(-1,0,-1,"throw"));G(()=>u.selectedTagIds,async()=>{var e;const{res:a}=m.pushAction(()=>W(u.selectedTagIds));n.value=await a,(e=p.value)==null||e.scrollToItem(0)},{immediate:!0});const p=k(),f={tabIdx:-1,target:"local",paneIdx:-1},{stackViewEl:b,multiSelectedIdxs:g}=Q().toRefs(),{itemSize:v,gridItems:M}=R(f),{showMenuIdx:c}=O(),{showGenInfo:d,imageGenInfo:I,q:C,onContextMenuClick:S}=j(f,{openNext:q}),T=async(a,e,i)=>{if(await S(a,e,i),a.key==="deleteFiles"){const r=g.value.includes(i)?g.value:[i];n.value=n.value.filter((_,t)=>!r.includes(t))}};return(a,e)=>{const i=D,r=X,_=P;return N(),U("div",{class:"container",ref_key:"stackViewEl",ref:b},[l(_,{size:"large",spinning:!m.isIdle},{default:o(()=>[l(r,{visible:s(d),"onUpdate:visible":e[1]||(e[1]=t=>w(d)?d.value=t:null),width:"70vw","mask-closable":"",onOk:e[2]||(e[2]=t=>d.value=!1)},{cancelText:o(()=>[]),default:o(()=>[l(i,{active:"",loading:!s(C).isIdle},{default:o(()=>[x("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:e[0]||(e[0]=t=>s(H)(s(I),"copied"))},[x("div",Y,y(a.$t("doubleClickToCopy")),1),$(" "+y(s(I)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),l(s(J),{ref_key:"scroller",ref:p,class:"file-list",items:n.value||[],"item-size":s(v).first,"key-field":"fullpath","item-secondary-size":s(v).second,gridItems:s(M)},{default:o(({item:t,index:z})=>[l(K,{idx:z,file:t,"show-menu-idx":s(c),"onUpdate:showMenuIdx":e[3]||(e[3]=V=>w(c)?c.value=V:null),"full-screen-preview-image-url":s(L)(t),onContextMenuClick:T},null,8,["idx","file","show-menu-idx","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])]),_:1},8,["spinning"])],512)}}});const oe=E(Z,[["__scopeId","data-v-e4f22d78"]]);export{oe as default};

View File

@ -0,0 +1 @@
.container[data-v-03eeaa14]{height:var(--pane-max-height);overflow:auto;display:flex;flex-direction:column;align-items:stretch}.container .generate-idx-hint[data-v-03eeaa14]{margin:64px;padding:64px;font-size:2em;text-align:center;background-color:var(--zp-secondary-background);white-space:pre-line;line-height:2.5em;border-radius:16px}.container .remove[data-v-03eeaa14]{padding:4px;position:cursor;border-radius:2px}.container .remove[data-v-03eeaa14]:hover{background-color:var(--zp-secondary-background)}.container .select[data-v-03eeaa14]{padding:8px}.container .search-bar[data-v-03eeaa14]{padding:8px;display:flex}.container .list-container[data-v-03eeaa14]{background-color:var(--zp-secondary-background);overflow:scroll}.container .tag-list[data-v-03eeaa14]{list-style:none;margin:16px;border-radius:16px;background:var(--zp-primary-background);padding:8px}.container .tag-list .cat-name[data-v-03eeaa14]{position:sticky;top:0;padding:4px 16px;background:var(--zp-primary-background);border-left:4px solid var(--primary-color);margin:4px}.container .tag-list .tag[data-v-03eeaa14]{border:2px solid var(--zp-secondary);color:var(--zp-primary);border-radius:999px;padding:4px 16px;margin:4px;display:inline-block;cursor:pointer;max-width:256px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.container .tag-list .tag.selected[data-v-03eeaa14]{color:var(--primary-color);border:2px solid var(--primary-color)}

1
vue/dist/assets/TagSearch-586b53d5.js vendored Normal file
View File

@ -0,0 +1 @@
import{at as K,as as R,b$ as Y,bO as W,d as X,z as Z,B as ee,C as ae,a1 as A,r as w,a2 as te,v as se,o as u,l as g,N as y,s as $,q as x,c as k,n as m,Y as ne,I as B,m as O,J as C,t as f,K as M,O as oe,c3 as re,Q as P,b6 as le,c4 as ie,bo as V,L as N,V as ue}from"./index-1bf3235b.js";import{I as ce,_ as de}from"./index-e56328e2.js";import"./index-f4a81223.js";import{c as z,u as pe,e as ge,M as me,r as ve}from"./db-85f44d87.js";import{b as fe}from"./_baseIteratee-f82bf799.js";import{B as D}from"./button-142d9500.js";function _e(s,n,t,l){for(var i=-1,a=s==null?0:s.length;++i<a;){var o=s[i];n(l,o,t(o),s)}return l}function he(s){return function(n,t,l){for(var i=-1,a=Object(n),o=l(n),v=o.length;v--;){var b=o[s?v:++i];if(t(a[b],b,a)===!1)break}return n}}var ye=he();const be=ye;function ke(s,n){return s&&be(s,n,K)}function Ce(s,n){return function(t,l){if(t==null)return t;if(!R(t))return s(t,l);for(var i=t.length,a=n?i:-1,o=Object(t);(n?a--:++a<i)&&l(o[a],a,o)!==!1;);return t}}var Ie=Ce(ke);const we=Ie;function $e(s,n,t,l){return we(s,function(i,a,o){n(l,i,t(i),o)}),l}function xe(s,n){return function(t,l){var i=Y(t)?_e:$e,a=n?n():{};return i(t,s,fe(l),a)}}var Be=Object.prototype,Oe=Be.hasOwnProperty,Se=xe(function(s,n,t){Oe.call(s,t)?s[t].push(n):W(s,t,[n])});const Te=Se,Ae={class:"container"},Ne={class:"search-bar"},Fe={key:0,class:"generate-idx-hint"},Me={class:"list-container"},Pe={class:"cat-name"},Ve=["onClick"],ze=["onClickCapture"],De=X({__name:"TagSearch",props:{tabIdx:null,paneIdx:null},setup(s){const n=s,t=Z(),l=ee(new ae(-1,0,-1,"throw")),i=A(()=>!l.isIdle),a=w(),o=w(new Set),v=A(()=>a.value?a.value.tags.slice().sort((e,r)=>r.count-e.count):[]),b=["custom","Model","lora","pos","size","Postprocess upscaler","Postprocess upscale by","Sampler"].reduce((e,r,p)=>(e[r]=p,e),{}),E=A(()=>Object.entries(Te(v.value,e=>e.type)).sort((e,r)=>b[e[0]]-b[r[0]])),q=te();se(async()=>{a.value=await z(),a.value.img_count&&a.value.expired&&F()});const F=async()=>{l.pushAction(async()=>{await pe(),a.value=await z()})},U=()=>{t.openTagSearchMatchedImageGridInRight(n.tabIdx,q,Array.from(o.value))},S=(e,r=!1)=>(r?`[${e.type}] `:"")+(e.display_name?`${e.display_name} : ${e.name}`:e.name),I=w(!1),_=w(""),G=async()=>{var r,p;if(!_.value){I.value=!1;return}const e=await l.pushAction(()=>ge({tag_name:_.value})).res;e.type!=="custom"&&V.error(N("existInOtherType")),(r=a.value)!=null&&r.tags.find(h=>h.id===e.id)?V.error(N("alreadyExists")):(p=a.value)==null||p.tags.push(e),_.value="",I.value=!1},L=e=>{me.confirm({title:N("confirmDelete"),async onOk(){var p,h;await ve({tag_id:e});const r=((p=a.value)==null?void 0:p.tags.findIndex(T=>T.id===e))??-1;(h=a.value)==null||h.tags.splice(r,1)}})};return(e,r)=>{const p=D,h=ce,T=D,j=de;return u(),g("div",Ae,[y("",!0),a.value?(u(),g($,{key:1},[x("div",null,[x("div",Ne,[k(m(ne),{conv:{value:c=>c.id,text:S,optionText:c=>S(c,!0)},mode:"multiple",style:{width:"100%"},options:m(v),value:Array.from(o.value),disabled:!m(v).length,placeholder:"Select tags to match images","onUpdate:value":r[0]||(r[0]=c=>o.value=new Set(c))},null,8,["conv","options","value","disabled"]),a.value.expired||!a.value.img_count?(u(),B(p,{key:0,onClick:F,loading:!l.isIdle,type:"primary"},{default:O(()=>[C(f(a.value.img_count===0?e.$t("generateIndexHint"):e.$t("UpdateIndex")),1)]),_:1},8,["loading"])):(u(),B(p,{key:1,type:"primary",onClick:U,loading:!l.isIdle,disabled:!o.value.size},{default:O(()=>[C(f(e.$t("search")),1)]),_:1},8,["loading","disabled"]))])]),m(v).filter(c=>c.type!=="custom").length?y("",!0):(u(),g("p",Fe,f(e.$t("needGenerateIdx")),1)),x("div",Me,[(u(!0),g($,null,M(m(E),([c,Q])=>(u(),g("ul",{class:"tag-list",key:c},[x("h3",Pe,f(e.$t(c)),1),(u(!0),g($,null,M(Q,(d,H)=>(u(),g("li",{key:d.id,class:oe(["tag",{selected:o.value.has(d.id)}]),onClick:J=>o.value.has(d.id)?o.value.delete(d.id):o.value.add(d.id)},[o.value.has(d.id)?(u(),B(m(re),{key:0})):y("",!0),C(" "+f(S(d))+" ",1),c==="custom"&&H!==0?(u(),g("span",{key:1,class:"remove",onClickCapture:P(J=>L(d.id),["stop"])},[k(m(le))],40,ze)):y("",!0)],10,Ve))),128)),c==="custom"?(u(),g("li",{key:0,class:"tag",onClick:r[2]||(r[2]=d=>I.value=!0)},[I.value?(u(),B(j,{key:0,compact:""},{default:O(()=>[k(h,{value:_.value,"onUpdate:value":r[1]||(r[1]=d=>_.value=d),style:{width:"128px"},loading:m(i),"allow-clear":"",size:"small"},null,8,["value","loading"]),k(T,{size:"small",type:"primary",onClickCapture:P(G,["stop"]),loading:m(i)},{default:O(()=>[C(f(_.value?e.$t("submit"):e.$t("cancel")),1)]),_:1},8,["onClickCapture","loading"])]),_:1})):(u(),g($,{key:1},[k(m(ie)),C(" "+f(e.$t("add")),1)],64))])):y("",!0)]))),128))])],64)):y("",!0)])}}});const Qe=ue(De,[["__scopeId","data-v-03eeaa14"]]);export{Qe as default};

View File

@ -1 +0,0 @@
.container[data-v-f84fa742]{height:var(--pane-max-height);overflow:auto;display:flex;flex-direction:column;align-items:stretch}.container .generate-idx-hint[data-v-f84fa742]{margin:64px;padding:64px;font-size:2em;text-align:center;background-color:var(--zp-secondary-background);white-space:pre-line;line-height:2.5em;border-radius:16px}.container .remove[data-v-f84fa742]{padding:4px;position:cursor;border-radius:2px}.container .remove[data-v-f84fa742]:hover{background-color:var(--zp-secondary-background)}.container .select[data-v-f84fa742]{padding:8px}.container .search-bar[data-v-f84fa742]{padding:8px;display:flex}.container .list-container[data-v-f84fa742]{background-color:var(--zp-secondary-background);overflow:scroll}.container .tag-list[data-v-f84fa742]{list-style:none;margin:16px;border-radius:16px;background:var(--zp-primary-background);padding:8px}.container .tag-list .cat-name[data-v-f84fa742]{position:sticky;top:0;padding:4px 16px;background:var(--zp-primary-background);border-left:4px solid var(--primary-color);margin:4px}.container .tag-list .tag[data-v-f84fa742]{border:2px solid var(--zp-secondary);color:var(--zp-primary);border-radius:999px;padding:4px 16px;margin:4px;display:inline-block;cursor:pointer;max-width:256px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.container .tag-list .tag.selected[data-v-f84fa742]{color:var(--primary-color);border:2px solid var(--primary-color)}

View File

@ -1 +0,0 @@
import{at as K,as as R,b$ as Y,bO as W,d as X,z as Z,B as ee,C as ae,a1 as A,r as w,a2 as te,v as se,o as u,l as g,N as y,s as $,q as x,c as k,n as m,Y as ne,K as B,m as O,I as C,t as f,J as M,O as oe,c3 as re,Q as V,b6 as le,c4 as ie,bo as z,L as N,V as ue}from"./index-a52af617.js";import{I as ce,_ as de}from"./index-3d756f88.js";import"./index-17b18069.js";import{c as D,u as pe,e as ge,M as me,r as ve}from"./db-86011ee4.js";import{b as fe}from"./_baseIteratee-4a6b4f10.js";import{B as E}from"./button-4d75a231.js";function _e(s,n,t,l){for(var i=-1,a=s==null?0:s.length;++i<a;){var o=s[i];n(l,o,t(o),s)}return l}function he(s){return function(n,t,l){for(var i=-1,a=Object(n),o=l(n),v=o.length;v--;){var b=o[s?v:++i];if(t(a[b],b,a)===!1)break}return n}}var ye=he();const be=ye;function ke(s,n){return s&&be(s,n,K)}function Ce(s,n){return function(t,l){if(t==null)return t;if(!R(t))return s(t,l);for(var i=t.length,a=n?i:-1,o=Object(t);(n?a--:++a<i)&&l(o[a],a,o)!==!1;);return t}}var Ie=Ce(ke);const we=Ie;function $e(s,n,t,l){return we(s,function(i,a,o){n(l,i,t(i),o)}),l}function xe(s,n){return function(t,l){var i=Y(t)?_e:$e,a=n?n():{};return i(t,s,fe(l),a)}}var Be=Object.prototype,Oe=Be.hasOwnProperty,Se=xe(function(s,n,t){Oe.call(s,t)?s[t].push(n):W(s,t,[n])});const Te=Se,Ae={class:"container"},Ne={class:"search-bar"},Fe={key:0,class:"generate-idx-hint"},Me={class:"list-container"},Ve={class:"cat-name"},ze=["onClick"],De=["onClickCapture"],Ee=X({__name:"TagSearch",props:{tabIdx:null,paneIdx:null},setup(s){const n=s,t=Z(),l=ee(new ae(-1,0,-1,"throw")),i=A(()=>!l.isIdle),a=w(),o=w(new Set),v=A(()=>a.value?a.value.tags.slice().sort((e,r)=>r.count-e.count):[]),b=["custom","Model","lora","pos","size","Sampler"].reduce((e,r,p)=>(e[r]=p,e),{}),q=A(()=>Object.entries(Te(v.value,e=>e.type)).sort((e,r)=>b[e[0]]-b[r[0]])),P=te();se(async()=>{a.value=await D(),a.value.img_count&&a.value.expired&&F()});const F=async()=>{l.pushAction(async()=>{await pe(),a.value=await D()})},U=()=>{t.openTagSearchMatchedImageGridInRight(n.tabIdx,P,Array.from(o.value))},S=(e,r=!1)=>(r?`[${e.type}] `:"")+(e.display_name?`${e.display_name} : ${e.name}`:e.name),I=w(!1),_=w(""),G=async()=>{var r,p;if(!_.value){I.value=!1;return}const e=await l.pushAction(()=>ge({tag_name:_.value})).res;e.type!=="custom"&&z.error(N("existInOtherType")),(r=a.value)!=null&&r.tags.find(h=>h.id===e.id)?z.error(N("alreadyExists")):(p=a.value)==null||p.tags.push(e),_.value="",I.value=!1},L=e=>{me.confirm({title:N("confirmDelete"),async onOk(){var p,h;await ve({tag_id:e});const r=((p=a.value)==null?void 0:p.tags.findIndex(T=>T.id===e))??-1;(h=a.value)==null||h.tags.splice(r,1)}})};return(e,r)=>{const p=E,h=ce,T=E,j=de;return u(),g("div",Ae,[y("",!0),a.value?(u(),g($,{key:1},[x("div",null,[x("div",Ne,[k(m(ne),{conv:{value:c=>c.id,text:S,optionText:c=>S(c,!0)},mode:"multiple",style:{width:"100%"},options:m(v),value:Array.from(o.value),disabled:!m(v).length,placeholder:"Select tags to match images","onUpdate:value":r[0]||(r[0]=c=>o.value=new Set(c))},null,8,["conv","options","value","disabled"]),a.value.expired||!a.value.img_count?(u(),B(p,{key:0,onClick:F,loading:!l.isIdle,type:"primary"},{default:O(()=>[C(f(a.value.img_count===0?e.$t("generateIndexHint"):e.$t("UpdateIndex")),1)]),_:1},8,["loading"])):(u(),B(p,{key:1,type:"primary",onClick:U,loading:!l.isIdle,disabled:!o.value.size},{default:O(()=>[C(f(e.$t("search")),1)]),_:1},8,["loading","disabled"]))])]),m(v).filter(c=>c.type!=="custom").length?y("",!0):(u(),g("p",Fe,f(e.$t("needGenerateIdx")),1)),x("div",Me,[(u(!0),g($,null,M(m(q),([c,Q])=>(u(),g("ul",{class:"tag-list",key:c},[x("h3",Ve,f(e.$t(c)),1),(u(!0),g($,null,M(Q,(d,H)=>(u(),g("li",{key:d.id,class:oe(["tag",{selected:o.value.has(d.id)}]),onClick:J=>o.value.has(d.id)?o.value.delete(d.id):o.value.add(d.id)},[o.value.has(d.id)?(u(),B(m(re),{key:0})):y("",!0),C(" "+f(S(d))+" ",1),c==="custom"&&H!==0?(u(),g("span",{key:1,class:"remove",onClickCapture:V(J=>L(d.id),["stop"])},[k(m(le))],40,De)):y("",!0)],10,ze))),128)),c==="custom"?(u(),g("li",{key:0,class:"tag",onClick:r[2]||(r[2]=d=>I.value=!0)},[I.value?(u(),B(j,{key:0,compact:""},{default:O(()=>[k(h,{value:_.value,"onUpdate:value":r[1]||(r[1]=d=>_.value=d),style:{width:"128px"},loading:m(i),"allow-clear":"",size:"small"},null,8,["value","loading"]),k(T,{size:"small",type:"primary",onClickCapture:V(G,["stop"]),loading:m(i)},{default:O(()=>[C(f(_.value?e.$t("submit"):e.$t("cancel")),1)]),_:1},8,["onClickCapture","loading"])]),_:1})):(u(),g($,{key:1},[k(m(ie)),C(" "+f(e.$t("add")),1)],64))])):y("",!0)]))),128))])],64)):y("",!0)])}}});const Qe=ue(Ee,[["__scopeId","data-v-f84fa742"]]);export{Qe as default};

View File

@ -1 +1 @@
import{ci as A,cj as O,cb as P,c1 as _,ck as m,bk as C,at as w,aS as h,cl as E,aU as g,cm as R,aQ as x,b$ as D}from"./index-a52af617.js";var G=A(Object.getPrototypeOf,Object);const B=G;function y(e,n){for(var r=0;r<n.length;r++){var t=n[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,O(t.key),t)}}function J(e,n,r){return n&&y(e.prototype,n),r&&y(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function W(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function M(e){return function(n){return n==null?void 0:n[e]}}var S=function(){return P()&&window.document.documentElement},a,X=function(){if(!S())return!1;if(a!==void 0)return a;var n=document.createElement("div");return n.style.display="flex",n.style.flexDirection="column",n.style.rowGap="1px",n.appendChild(document.createElement("div")),n.appendChild(document.createElement("div")),document.body.appendChild(n),a=n.scrollHeight===1,document.body.removeChild(n),a},F=1,I=2;function L(e,n,r,t){var i=r.length,o=i,s=!t;if(e==null)return!o;for(e=Object(e);i--;){var f=r[i];if(s&&f[2]?f[1]!==e[f[0]]:!(f[0]in e))return!1}for(;++i<o;){f=r[i];var u=f[0],l=e[u],c=f[1];if(s&&f[2]){if(l===void 0&&!(u in e))return!1}else{var d=new _;if(t)var p=t(l,c,u,e,n,d);if(!(p===void 0?m(c,l,F|I,t,d):p))return!1}}return!0}function b(e){return e===e&&!C(e)}function U(e){for(var n=w(e),r=n.length;r--;){var t=n[r],i=e[t];n[r]=[t,i,b(i)]}return n}function v(e,n){return function(r){return r==null?!1:r[e]===n&&(n!==void 0||e in Object(r))}}function $(e){var n=U(e);return n.length==1&&n[0][2]?v(n[0][0],n[0][1]):function(r){return r===e||L(r,e,n)}}function K(e,n,r){var t=e==null?void 0:h(e,n);return t===void 0?r:t}var T=1,N=2;function k(e,n){return E(e)&&b(n)?v(g(e),n):function(r){var t=K(r,e);return t===void 0&&t===n?R(r,e):m(n,t,T|N)}}function q(e){return function(n){return h(n,e)}}function H(e){return E(e)?M(g(e)):q(e)}function Y(e){return typeof e=="function"?e:e==null?x:typeof e=="object"?D(e)?k(e[0],e[1]):$(e):H(e)}export{J as _,W as a,Y as b,S as c,X as d,B as g};
import{ci as A,cj as O,cb as P,c1 as _,ck as m,bk as C,at as w,aS as h,cl as E,aU as g,cm as R,aQ as x,b$ as D}from"./index-1bf3235b.js";var G=A(Object.getPrototypeOf,Object);const B=G;function y(e,n){for(var r=0;r<n.length;r++){var t=n[r];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,O(t.key),t)}}function J(e,n,r){return n&&y(e.prototype,n),r&&y(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function W(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}function M(e){return function(n){return n==null?void 0:n[e]}}var S=function(){return P()&&window.document.documentElement},a,X=function(){if(!S())return!1;if(a!==void 0)return a;var n=document.createElement("div");return n.style.display="flex",n.style.flexDirection="column",n.style.rowGap="1px",n.appendChild(document.createElement("div")),n.appendChild(document.createElement("div")),document.body.appendChild(n),a=n.scrollHeight===1,document.body.removeChild(n),a},F=1,I=2;function L(e,n,r,t){var i=r.length,o=i,s=!t;if(e==null)return!o;for(e=Object(e);i--;){var f=r[i];if(s&&f[2]?f[1]!==e[f[0]]:!(f[0]in e))return!1}for(;++i<o;){f=r[i];var u=f[0],l=e[u],c=f[1];if(s&&f[2]){if(l===void 0&&!(u in e))return!1}else{var d=new _;if(t)var p=t(l,c,u,e,n,d);if(!(p===void 0?m(c,l,F|I,t,d):p))return!1}}return!0}function b(e){return e===e&&!C(e)}function U(e){for(var n=w(e),r=n.length;r--;){var t=n[r],i=e[t];n[r]=[t,i,b(i)]}return n}function v(e,n){return function(r){return r==null?!1:r[e]===n&&(n!==void 0||e in Object(r))}}function $(e){var n=U(e);return n.length==1&&n[0][2]?v(n[0][0],n[0][1]):function(r){return r===e||L(r,e,n)}}function K(e,n,r){var t=e==null?void 0:h(e,n);return t===void 0?r:t}var T=1,N=2;function k(e,n){return E(e)&&b(n)?v(g(e),n):function(r){var t=K(r,e);return t===void 0&&t===n?R(r,e):m(n,t,T|N)}}function q(e){return function(n){return h(n,e)}}function H(e){return E(e)?M(g(e)):q(e)}function Y(e){return typeof e=="function"?e:e==null?x:typeof e=="object"?D(e)?k(e[0],e[1]):$(e):H(e)}export{J as _,W as a,Y as b,S as c,X as d,B as g};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{aR as n,c8 as c}from"./index-a52af617.js";import{g as a}from"./_baseIteratee-4a6b4f10.js";var i="[object Object]",s=Function.prototype,p=Object.prototype,e=s.toString,f=p.hasOwnProperty,b=e.call(Object);function l(o){if(!n(o)||c(o)!=i)return!1;var r=a(o);if(r===null)return!0;var t=f.call(r,"constructor")&&r.constructor;return typeof t=="function"&&t instanceof t&&e.call(t)==b}export{l as i};
import{aR as n,c8 as c}from"./index-1bf3235b.js";import{g as a}from"./_baseIteratee-f82bf799.js";var i="[object Object]",s=Function.prototype,p=Object.prototype,e=s.toString,f=p.hasOwnProperty,b=e.call(Object);function l(o){if(!n(o)||c(o)!=i)return!1;var r=a(o);if(r===null)return!0;var t=f.call(r,"constructor")&&r.constructor;return typeof t=="function"&&t instanceof t&&e.call(t)==b}export{l as i};

1
vue/dist/assets/stackView-76338454.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.full-screen-menu[data-v-ea83da82]{position:fixed;z-index:99999;background:var(--zp-primary-background);padding:16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .container[data-v-ea83da82]{height:100%;display:flex;flex-direction:column}.full-screen-menu .gen-info[data-v-ea83da82]{padding-top:8px;flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;position:relative}.full-screen-menu.unset-size[data-v-ea83da82]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-ea83da82]{position:absolute;bottom:0;right:0;width:10px;height:10px;background-color:var(--zp-secondary);cursor:se-resize}.full-screen-menu .actoion-bar[data-v-ea83da82]{display:flex;align-items:center}.full-screen-menu .actoion-bar .icon[data-v-ea83da82]{font-size:1.5em}.full-screen-menu .actoion-bar>*[data-v-ea83da82]{margin-right:8px}.uninstalled-hint[data-v-3722ac77]{margin:256px auto;display:flex;flex-flow:column;justify-content:center;align-items:center}.uninstalled-hint>*[data-v-3722ac77]{margin:16px;text-align:center}.preview-switch[data-v-3722ac77]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-3722ac77]{margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-3722ac77]{opacity:0;pointer-events:none;cursor:none}.container[data-v-3722ac77]{height:100%;background:var(--zp-secondary-background)}.location-bar[data-v-3722ac77]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}.location-bar .actions[data-v-3722ac77]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-3722ac77]{margin-left:8px}.view[data-v-3722ac77]{padding:8px;height:calc(100vh - 96px)}.view .file-list[data-v-3722ac77]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-3722ac77]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.full-screen-menu[data-v-5b19760d]{position:fixed;z-index:99999;background:var(--zp-primary-background);padding:16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .container[data-v-5b19760d]{height:100%;display:flex;flex-direction:column}.full-screen-menu .gen-info[data-v-5b19760d]{padding-top:8px;flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;position:relative}.full-screen-menu.unset-size[data-v-5b19760d]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-5b19760d]{position:absolute;bottom:0;right:0;width:10px;height:10px;background-color:var(--zp-secondary);cursor:se-resize}.full-screen-menu .actoion-bar[data-v-5b19760d]{display:flex;align-items:center}.full-screen-menu .actoion-bar .icon[data-v-5b19760d]{font-size:1.5em}.full-screen-menu .actoion-bar>*[data-v-5b19760d]{margin-right:8px}.uninstalled-hint[data-v-3722ac77]{margin:256px auto;display:flex;flex-flow:column;justify-content:center;align-items:center}.uninstalled-hint>*[data-v-3722ac77]{margin:16px;text-align:center}.preview-switch[data-v-3722ac77]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-3722ac77]{margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-3722ac77]{opacity:0;pointer-events:none;cursor:none}.container[data-v-3722ac77]{height:100%;background:var(--zp-secondary-background)}.location-bar[data-v-3722ac77]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}.location-bar .actions[data-v-3722ac77]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-3722ac77]{margin-left:8px}.view[data-v-3722ac77]{padding:8px;height:calc(100vh - 96px)}.view .file-list[data-v-3722ac77]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-3722ac77]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}

File diff suppressed because one or more lines are too long

2
vue/dist/index.html vendored
View File

@ -7,7 +7,7 @@
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-a52af617.js"></script>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-1bf3235b.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-29c71e71.css">
</head>

View File

@ -16,7 +16,7 @@ const loading = computed(() => !queue.isIdle)
const info = ref<DataBaseBasicInfo>()
const selectedId = ref(new Set<number>())
const tags = computed(() => info.value ? info.value.tags.slice().sort((a, b) => b.count - a.count) : [])
const classSort = (["custom", "Model", "lora", "pos", "size", "Sampler"]).reduce((p, c, i) => {
const classSort = (["custom", "Model", "lora", "pos", "size", "Postprocess upscaler", "Postprocess upscale by", "Sampler", ]).reduce((p, c, i) => {
p[c] = i
return p
}, {} as Dict<number>)

View File

@ -51,44 +51,46 @@ useResizeAndDrag(el, resizeHandle, dragHandle, {
</script>
<template>
<div ref="el" class="full-screen-menu" @wheel.capture.stop :class="{ 'unset-size': !state.expanded }">
<div ref="el" class="full-screen-menu" @wheel.capture.stop :class="{ 'unset-size': !state.expanded }">
<div class="container">
<div class="actoion-bar">
<template v-if="state.expanded">
<a-dropdown :trigger="['hover']" style="z-index: 99999;" :get-popup-container="p => p.parentNode as HTMLDivElement">
<a-button>{{ t('openContextMenu') }}</a-button>
<template #overlay>
<a-menu @click="emit('contextMenuClick', $event, file, idx)" style="z-index: 99999;">
<a-menu-item key="send2txt2img">{{ $t('sendToTxt2img') }}</a-menu-item>
<a-menu-item key="send2img2img">{{ $t('sendToImg2img') }}</a-menu-item>
<a-menu-item key="send2inpaint">{{ $t('sendToInpaint') }}</a-menu-item>
<a-menu-item key="send2extras">{{ $t('sendToExtraFeatures') }}</a-menu-item>
<a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item>
<a-sub-menu key="add-custom-tag" :title="$t('addCustomTag')">
<a-menu-item v-for="tag in global.conf?.all_custom_tags ?? []" :key="tag.id">{{
tag.name
}}</a-menu-item>
</a-sub-menu>
</a-menu>
</template>
</a-dropdown>
<a-button @click="copy2clipboard(imageGenInfo, 'copied')">{{ $t('copyPrompt') }}</a-button>
<div flex-placeholder></div>
</template>
<div class="icon" style="cursor: pointer; " @click="state.expanded = !state.expanded">
<FullscreenExitOutlined v-if="state.expanded"/>
<FullscreenOutlined v-else/>
</div>
<div ref="dragHandle" class="icon" style="cursor: grab;" >
<div ref="dragHandle" class="icon" style="cursor: grab;">
<DragOutlined />
</div>
<div class="icon" style="cursor: pointer; " @click="state.expanded = !state.expanded">
<FullscreenExitOutlined v-if="state.expanded" />
<FullscreenOutlined v-else />
</div>
<template v-if="state.expanded">
<div flex-placeholder></div>
<a-dropdown :trigger="['hover']" style="z-index: 99999;"
:get-popup-container="p => p.parentNode as HTMLDivElement">
<a-button>{{ t('openContextMenu') }}</a-button>
<template #overlay>
<a-menu @click="emit('contextMenuClick', $event, file, idx)" style="z-index: 99999;">
<a-menu-item key="send2txt2img">{{ $t('sendToTxt2img') }}</a-menu-item>
<a-menu-item key="send2img2img">{{ $t('sendToImg2img') }}</a-menu-item>
<a-menu-item key="send2inpaint">{{ $t('sendToInpaint') }}</a-menu-item>
<a-menu-item key="send2extras">{{ $t('sendToExtraFeatures') }}</a-menu-item>
<a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item>
<a-sub-menu key="add-custom-tag" :title="$t('addCustomTag')">
<a-menu-item v-for="tag in global.conf?.all_custom_tags ?? []" :key="tag.id">{{
tag.name
}}</a-menu-item>
</a-sub-menu>
</a-menu>
</template>
</a-dropdown>
<a-button @click="copy2clipboard(imageGenInfo, 'copied')">{{ $t('copyPrompt') }}</a-button>
</template>
</div>
<div class="gen-info" v-if="state.expanded">
{{ imageGenInfo }}
</div>
</div>
<div class="mouse-sensor" ref="resizeHandle" v-if="state.expanded"/>
<div class="mouse-sensor" ref="resizeHandle" v-if="state.expanded" />
</div>
</template>

View File

@ -9,7 +9,7 @@ export const getAutoCompletedTagList = async ({
}: ReturnTypeAsync<typeof getGlobalSetting>) => {
const picked = pick(
global_setting,
'additional_networks_extra_lora_path',
// 'additional_networks_extra_lora_path',
'outdir_grids',
'outdir_extras_samples',
'outdir_img2img_grids',
@ -35,7 +35,7 @@ export const getAutoCompletedTagList = async ({
outdir_img2img_samples: t('i2i'),
outdir_save: t('saveButtonSavesTo'),
outdir_extras_samples: t('extra'),
additional_networks_extra_lora_path: 'LoRA',
// additional_networks_extra_lora_path: 'LoRA',
outdir_grids: t('gridImage'),
outdir_img2img_grids: t('i2i-grid'),
outdir_samples: t('image'),