├── .gitignore ├── .gitattributes ├── py └── CYBERPUNKHT.py ├── LICENSE ├── __init__.py ├── js ├── cyberpunk-image.js ├── Cyberpunk.html ├── cyberpunk-noto.js ├── cyberpunk-i18n.js ├── cyberpunkht.js └── cyberpunklink.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | __pycache__/ 3 | .DS_Store 4 | Thumbs.db 5 | *.log 6 | 7 | *.tmp 8 | *.cache 9 | *.bak 10 | *~ 11 | node_modules/ 12 | 13 | .vscode/ 14 | .idea/ 15 | *.swp 16 | *.swo 17 | 18 | # Documentation images (stored externally) 19 | images/ -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | images/*.gif filter=lfs diff=lfs merge=lfs -text 3 | images/*.jpg filter=lfs diff=lfs merge=lfs -text 4 | images/*.png filter=lfs diff=lfs merge=lfs -text 5 | images/*.jpeg filter=lfs diff=lfs merge=lfs -text 6 | *.gif filter=lfs diff=lfs merge=lfs -text 7 | *.jpg filter=lfs diff=lfs merge=lfs -text 8 | *.png filter=lfs diff=lfs merge=lfs -text 9 | *.jpeg filter=lfs diff=lfs merge=lfs -text 10 | *.mp4 filter=lfs diff=lfs merge=lfs -text 11 | *.avi filter=lfs diff=lfs merge=lfs -text 12 | *.mov filter=lfs diff=lfs merge=lfs -text 13 | *.zip filter=lfs diff=lfs merge=lfs -text 14 | *.tar.gz filter=lfs diff=lfs merge=lfs -text -------------------------------------------------------------------------------- /py/CYBERPUNKHT.py: -------------------------------------------------------------------------------- 1 | class AnyType(str): 2 | def __ne__(self, __value: object) -> bool: 3 | return False 4 | any_type = AnyType("*") 5 | class CYBERPUNKHT: 6 | @classmethod 7 | def INPUT_TYPES(s): 8 | return {"required": { 9 | "Float": ("FLOAT", { 10 | "default": 1, 11 | "min": -999999, 12 | "max": 999999, 13 | "step": 0.01, 14 | "display": "slider" 15 | }), 16 | }, 17 | "optional": {}, 18 | "hidden": { 19 | "output_type": (["float", "int"], {"default": "float"}), 20 | } 21 | } 22 | RETURN_TYPES = (any_type,) 23 | FUNCTION = "run" 24 | CATEGORY = "2🐕/CYBERPUNK" 25 | INPUT_IS_LIST = False 26 | OUTPUT_IS_LIST = (False,) 27 | def run(self, Float, output_type="float"): 28 | processed_value = round(Float, 10) 29 | print(f"CYBERPUNKHT: Float={Float}, output_type={output_type}, processed_value={processed_value}") 30 | if output_type == "int": 31 | scaled_number = int(round(processed_value)) 32 | print(f"CYBERPUNKHT: Converting to int: {scaled_number}") 33 | else: 34 | scaled_number = float(processed_value) 35 | print(f"CYBERPUNKHT: Keeping as float: {scaled_number}") 36 | return (scaled_number,) 37 | NODE_CLASS_MAPPINGS = { 38 | "CYBERPUNKHT": CYBERPUNKHT 39 | } 40 | NODE_DISPLAY_NAME_MAPPINGS = { 41 | "CYBERPUNKHT": "CYBERPUNKHT" 42 | } 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | CYBERPUNK-STYLE-DIY License 2 | 3 | Copyright (c) 2025 CYBERPUNK-STYLE-DIY 4 | 5 | All rights reserved. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to use 9 | the Software in its original form, subject to the following conditions: 10 | 11 | PERMITTED: 12 | ✅ Use - You may use the Software for personal and commercial purposes 13 | ✅ Distribution - You may distribute the original, unmodified Software 14 | ✅ Display - You may publicly display the Software 15 | 16 | PROHIBITED: 17 | ❌ Modification - You may NOT modify, alter, or create derivative works 18 | ❌ Reverse Engineering - You may NOT reverse engineer or decompile 19 | ❌ Redistribution of Modified Versions - You may NOT distribute modified versions 20 | ❌ Claim of Authorship - You may NOT claim authorship of this work 21 | 22 | CONDITIONS: 23 | 📋 The above copyright notice and this permission notice shall be included in all copies 24 | 📋 You must retain all original credits and attribution 25 | 📋 Any distribution must include this complete license text 26 | 📋 You must clearly indicate that the Software is provided "as-is" from the original author 27 | 28 | DISCLAIMER: 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 35 | SOFTWARE. 36 | 37 | For any questions regarding this license, please contact the original author. 38 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import importlib 4 | python = sys.executable 5 | file_directory = os.path.dirname(os.path.abspath(__file__)) 6 | WEB_DIRECTORY = file_directory + "/js" 7 | def print_cyberpunk_logo(): 8 | logo = [ 9 | "\033[38;5;201m ██████╗\033[38;5;165m██╗ ██╗\033[38;5;129m██████╗ \033[38;5;93m███████╗\033[38;5;57m██████╗ \033[38;5;21m██████╗ \033[38;5;27m██╗ ██╗\033[38;5;33m███╗ ██╗\033[38;5;39m██╗ ██╗\033[0m", 10 | "\033[38;5;201m██╔════╝\033[38;5;165m╚██╗ ██╔╝\033[38;5;129m██╔══██╗\033[38;5;93m██╔════╝\033[38;5;57m██╔══██╗\033[38;5;21m██╔══██╗\033[38;5;27m██║ ██║\033[38;5;33m████╗ ██║\033[38;5;39m██║ ██╔╝\033[0m", 11 | "\033[38;5;201m██║ \033[38;5;165m ╚████╔╝ \033[38;5;129m██████╔╝\033[38;5;93m█████╗ \033[38;5;57m██████╔╝\033[38;5;21m██████╔╝\033[38;5;27m██║ ██║\033[38;5;33m██╔██╗ ██║\033[38;5;39m█████╔╝ \033[0m", 12 | "\033[38;5;201m██║ \033[38;5;165m ╚██╔╝ \033[38;5;129m██╔══██╗\033[38;5;93m██╔══╝ \033[38;5;57m██╔═══╝ \033[38;5;21m██╔═══╝ \033[38;5;27m██║ ██║\033[38;5;33m██║╚██╗██║\033[38;5;39m██╔═██╗ \033[0m", 13 | "\033[38;5;201m╚██████╗\033[38;5;165m ██║ \033[38;5;129m██████╔╝\033[38;5;93m███████╗\033[38;5;57m██║ \033[38;5;21m██║ \033[38;5;27m╚██████╔╝\033[38;5;33m██║ ╚████║\033[38;5;39m██║ ██╗\033[0m", 14 | "\033[38;5;201m ╚═════╝\033[38;5;165m ╚═╝ \033[38;5;129m╚═════╝ \033[38;5;93m╚══════╝\033[38;5;57m╚═╝ \033[38;5;21m╚═╝ \033[38;5;27m ╚═════╝ \033[38;5;33m╚═╝ ╚═══╝\033[38;5;39m╚═╝ ╚═╝\033[0m" 15 | ] 16 | print() 17 | for line in logo: 18 | print(line) 19 | print() 20 | print("\033[38;5;51m🚀 CYBERPUNK-STYLE-DIY Custom Nodes Loaded! 🚀\033[0m") 21 | print() 22 | print_cyberpunk_logo() 23 | NODE_CLASS_MAPPINGS = {} 24 | NODE_DISPLAY_NAME_MAPPINGS = {} 25 | def load_nodes(): 26 | py_dir = os.path.join(file_directory, "py") 27 | if os.path.exists(py_dir): 28 | if py_dir not in sys.path: 29 | sys.path.insert(0, py_dir) 30 | for filename in os.listdir(py_dir): 31 | if filename.endswith(".py") and filename != "__init__.py": 32 | module_name = filename[:-3] 33 | try: 34 | module = importlib.import_module(module_name) 35 | if hasattr(module, "NODE_CLASS_MAPPINGS"): 36 | NODE_CLASS_MAPPINGS.update(module.NODE_CLASS_MAPPINGS) 37 | if hasattr(module, "NODE_DISPLAY_NAME_MAPPINGS"): 38 | NODE_DISPLAY_NAME_MAPPINGS.update(module.NODE_DISPLAY_NAME_MAPPINGS) 39 | except: 40 | pass 41 | load_nodes() 42 | __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"] -------------------------------------------------------------------------------- /js/cyberpunk-image.js: -------------------------------------------------------------------------------- 1 | import{app as e}from"../../scripts/app.js";class t extends LGraphNode{constructor(e){super(e),this.title=e,this.serialize_widgets=!0,this.isVirtualNode=!0,this.class_type=this.constructor.type,this.type=this.constructor.type,this.pos=[0,0]}static setUp(){this.registered||(LiteGraph.registerNodeType(this.type,this),this.registered=!0)}configure(e){e.properties&&Object.assign(this.properties,e.properties),e.pos&&(this.pos=e.pos),e.size&&(this.size=e.size),e.flags&&(this.flags=e.flags)}serialize(){const e=super.serialize();return!e.id&&this.id&&(e.id=this.id),e.order||void 0===this.order||(e.order=this.order),e.mode||void 0===this.mode||(e.mode=this.mode),e.properties={...this.properties},!e.pos&&this.pos&&(e.pos=[...this.pos]),!e.size&&this.size&&(e.size=[...this.size]),!e.flags&&this.flags&&(e.flags={...this.flags}),e}}class i extends t{constructor(t=i.title){super(t),this.flags=this.flags||{},this.flags.allow_interaction=!this.flags.pinned,this.properties={imageUrl:"",previewSize:256,fontSize:12,fontFamily:"Arial",fontColor:"#ffffff",backgroundColor:"#333333",backgroundAlpha:.8,borderRadius:8,padding:8,waitingText:"等待图像链接或Base64...",loadingText:"加载中..."},this.img=new Image,this.img.onload=()=>{!this.hasBeenResized&&256===this.size[0]&&this.size[1],e.graph.setDirtyCanvas(!0)},this.resizable=!0,this.size=[256,256],this.imageLoaded=!1,this.color="#fff0",this.bgcolor="#fff0",this.loadError=null,this.hasBeenResized=!1}onDrawBackground(e){if(!this.imageLoaded&&this.properties.imageUrl){const e=this.properties.imageUrl.trim();if(e.startsWith("http://")||e.startsWith("https://"))this.img.src=e;else try{let t=e;e.includes("base64,")?this.img.src=e:(t=t.replace(/[\n\r]/g,""),this.img.src="data:image/png;base64,"+t)}catch(e){console.error("Base64解码失败:",e),this.loadError="Base64解码失败"}this.imageLoaded=!0}const t=this.properties.borderRadius,i=(this.properties.padding,this.properties.backgroundColor),s=this.properties.backgroundAlpha;if(s>0){const r=e.fillStyle;e.fillStyle=this.hexToRGBA(i,s),t>0?(e.beginPath(),e.moveTo(t,0),e.lineTo(this.size[0]-t,0),e.quadraticCurveTo(this.size[0],0,this.size[0],t),e.lineTo(this.size[0],this.size[1]-t),e.quadraticCurveTo(this.size[0],this.size[1],this.size[0]-t,this.size[1]),e.lineTo(t,this.size[1]),e.quadraticCurveTo(0,this.size[1],0,this.size[1]-t),e.lineTo(0,t),e.quadraticCurveTo(0,0,t,0),e.closePath(),e.fill()):e.fillRect(0,0,this.size[0],this.size[1]),e.fillStyle=r}if(this.img.complete&&0!==this.img.naturalWidth){const t=e.globalAlpha,i=e.globalCompositeOperation,s=this.properties.previewSize,r=this.img.naturalWidth,o=this.img.naturalHeight;let a;a=r>=o?s/r:s/o;const l=r*a,n=o*a,p=(this.size[0]-l)/2,h=(this.size[1]-n)/2;try{l>0&&n>0?(e.globalAlpha=1,e.globalCompositeOperation="source-over",e.drawImage(this.img,p,h,l,n),e.globalAlpha=t,e.globalCompositeOperation=i):console.warn("图像绘制参数异常:",{x:p,y:h,drawWidth:l,drawHeight:n,nodeSize:this.size,scale:a,targetSize:s})}catch(s){console.error("图像绘制失败:",s),e.globalAlpha=t,e.globalCompositeOperation=i}}else{const t=e.fillStyle,i=e.font,s=e.textAlign;e.fillStyle=this.properties.fontColor,e.font=this.properties.fontSize+"px "+this.properties.fontFamily,e.textAlign="center",e.fillText(this.loadError||(this.properties.imageUrl?this.properties.loadingText:this.properties.waitingText),this.size[0]/2,this.size[1]/2),e.fillStyle=t,e.font=i,e.textAlign=s}}hexToRGBA(e,t){return"rgba("+parseInt(e.slice(1,3),16)+", "+parseInt(e.slice(3,5),16)+", "+parseInt(e.slice(5,7),16)+", "+t+")"}onPropertyChanged(t,i){"imageUrl"===t?(this.imageLoaded=!1,this.img.src="",this.loadError=null,e.graph.setDirtyCanvas(!0)):e.graph.setDirtyCanvas(!0)}onDblClick(e,t,i){LGraphCanvas.active_canvas.showShowNodePanel(this)}onResize(t){t&&Array.isArray(t)&&t.length>=2&&(this.size[0]=Math.max(t[0],50),this.size[1]=Math.max(t[1],50),this.hasBeenResized=!0,e.graph.setDirtyCanvas(!0))}getExtraMenuOptions(e,t){t.unshift({content:"设置预览大小",submenu:{options:[{content:"128x128",callback:()=>{this.properties.previewSize=128,this.onPropertyChanged("previewSize",128)}},{content:"256x256",callback:()=>{this.properties.previewSize=256,this.onPropertyChanged("previewSize",256)}},{content:"512x512",callback:()=>{this.properties.previewSize=512,this.onPropertyChanged("previewSize",512)}}]}}),t.push({content:"固定节点",callback:()=>{this.flags.pinned=!this.flags.pinned,this.flags.allow_interaction=!this.flags.pinned}})}onShowCustomPanelInfo(e){var t,i;null===(t=e.querySelector('div.property[data-property="Mode"]'))||void 0===t||t.remove(),null===(i=e.querySelector('div.property[data-property="Color"]'))||void 0===i||i.remove()}draw(e){this.flags=this.flags||{},this.flags.allow_interaction=!this.flags.pinned}}i.type="2🐕/CYBERPUNK",i.title="图像链接预览",i.title_mode=LiteGraph.NO_TITLE,i.collapsable=!1,i["@imageUrl"]={type:"string",title:"图像链接"},i["@previewSize"]={type:"number",title:"预览大小",default:256,min:64,max:1024,step:1},i["@fontSize"]={type:"number",title:"字体大小",default:12,min:8,max:32,step:1},i["@fontFamily"]={type:"string",title:"字体",default:"Arial"},i["@fontColor"]={type:"color",title:"字体颜色",default:"#ffffff"},i["@backgroundColor"]={type:"color",title:"背景颜色",default:"#333333"},i["@backgroundAlpha"]={type:"number",title:"背景透明度",default:0,min:0,max:1,step:.1},i["@borderRadius"]={type:"number",title:"圆角大小",default:8,min:0,max:50,step:1},i["@padding"]={type:"number",title:"内边距",default:8,min:0,max:50,step:1},i["@waitingText"]={type:"string",title:"等待提示文字",default:"等待图像链接或Base64..."},i["@loadingText"]={type:"string",title:"加载提示文字",default:"加载中..."};const s=LGraphCanvas.prototype.drawNode;LGraphCanvas.prototype.drawNode=function(e,t){if(e.constructor===i){e.bgcolor="transparent",e.color="#666666";const i=s.apply(this,arguments);return e.onDrawBackground(t),i}return s.apply(this,arguments)};const r={processingMouseDown:!1,lastMouseEvent:null,lastClickTime:0},o=LGraph.prototype.getNodeOnPos;LGraph.prototype.getNodeOnPos=function(e,t,s,a){if(s){const e=LiteGraph.getTime()-LGraphCanvas.active_canvas.last_mouseclick<300;r.processingMouseDown&&r.lastMouseEvent&&r.lastMouseEvent.type.includes("down")&&1===r.lastMouseEvent.which&&!e&&(s=[...s].filter((e=>!(e instanceof i&&e.flags.pinned))))}return o.apply(this,[e,t,s,a])},document.addEventListener("mousedown",(function(e){r.processingMouseDown=!0,r.lastMouseEvent=e}),!0),document.addEventListener("mouseup",(function(){r.processingMouseDown=!1}),!0),e.registerExtension({name:"2🐕.URLPreview",registerCustomNodes(){i.setUp()}}); -------------------------------------------------------------------------------- /js/Cyberpunk.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Cyberpunk标题生成器 7 | 155 | 156 | 157 |
158 |
159 | 160 | 161 |
162 |

🎨 Cyberpunk标题生成器

163 |
164 |

使用说明:

165 |
    166 |
  1. 点击上传按钮或拖拽PNG图像文件到虚线框内
  2. 167 |
  3. 系统会自动生成base64编码和对应的JS代码
  4. 168 |
  5. 复制生成的代码并粘贴到 titleImages.js 文件中
  6. 169 |
  7. 保存文件后重新加载ComfyUI即可使用新图像
  8. 170 |
171 |
172 |
173 |

点击按钮选择文件或拖拽PNG图像到此处

174 | 177 | 178 |
179 |
180 |

🏷️ 主题名称设置

181 |

为转换的图像指定自定义主题名称

182 |
183 | 184 | 185 | 💡 留空将使用文件名作为主题名称 186 |
187 |
188 |
189 |
190 | 384 | 385 | -------------------------------------------------------------------------------- /js/cyberpunk-noto.js: -------------------------------------------------------------------------------- 1 | const t=n;!function(){const t=n,s=a();for(;;)try{if(526298===-parseInt(t(588))/1+-parseInt(t(616))/2*(parseInt(t(475))/3)+-parseInt(t(455))/4*(parseInt(t(464))/5)+parseInt(t(552))/6*(-parseInt(t(521))/7)+parseInt(t(594))/8+-parseInt(t(608))/9*(parseInt(t(514))/10)+-parseInt(t(443))/11*(-parseInt(t(640))/12))break;s.push(s.shift())}catch(t){s.push(s.shift())}}();import{app as s}from"../../scripts/app.js";const i=function(t){const s=n;return window[s(600)]&&window[s(600)].getText?window[s(600)][s(452)](t):window[s(452)]&&"function"==typeof window[s(452)]?window.getText(t):t};class e extends LGraphNode{constructor(t){const s=n;super(t),this[s(484)]=t,this.serialize_widgets=!0,this.isVirtualNode=!0,this.class_type=this[s(454)][s(657)],this[s(657)]=this[s(454)][s(657)],this[s(565)]=[0,0]}static[t(650)](){const s=t;this[s(528)]||(LiteGraph[s(541)](this.type,this),this.registered=!0)}[t(519)](s){const i=t;s[i(644)]&&Object.assign(this[i(644)],s[i(644)]),s[i(565)]&&(this[i(565)]=s[i(565)]),s[i(590)]&&(this[i(590)]=s[i(590)]),s.flags&&(this[i(688)]=s[i(688)])}[t(478)](){const s=t,i=super[s(478)]();return!i.id&&this.id&&(i.id=this.id),i.order||void 0===this.order||(i.order=this[s(431)]),i[s(620)]||void 0===this[s(620)]||(i[s(620)]=this[s(620)]),i[s(644)]={...this[s(644)]},!i.pos&&this.pos&&(i[s(565)]=[...this.pos]),!i.size&&this.size&&(i[s(590)]=[...this[s(590)]]),!i.flags&&this.flags&&(i.flags={...this[s(688)]}),i}}class h extends e{constructor(s=h[t(484)]){const e=t;super(s),this.flags=this[e(688)]||{},this[e(688)].allow_interaction=!this[e(688)].pinned,this.properties={text:i("textEditorDefaultText"),fontSize:14,fontColor:"#ffffff",backgroundColor:e(690),backgroundAlpha:.8,borderRadius:8,padding:12,lineHeight:1.4,textAlign:e(500)},this[e(479)]=!0,this[e(590)]=[200,100],this[e(679)]="#fff0",this[e(677)]=e(613),this[e(474)]=!1,this.editTextarea=null,this[e(462)]=[]}wrapText(s,i,e){const h=t;if(!i||""===i.trim())return[""];const n=i.split(" "),r=[];let o=n[0]||"";for(let t=1;tr&&h[i(559)]({type:i(653),content:s[i(649)](r,n[i(562)])}),h[i(559)]({type:i(645),content:n[1],fullMatch:n[0]}),r=n[i(562)]+n[0].length;return r{const e=n,r=10+i*h;let o;"left"===this[e(644)][e(466)]?(s.textAlign=e(500),o=10):e(444)===this[e(644)][e(466)]?(s[e(466)]=e(444),o=this[e(590)][0]-10):(s[e(466)]="center",o=this[e(590)][0]/2);const a=this.parseTextWithLinks(t);let l=o;if("center"===this.properties.textAlign||"right"===this[e(644)][e(466)]){const t=a[e(607)](((t,i)=>t+s.measureText(i.content).width),0);l=e(581)===this.properties[e(466)]?(this[e(590)][0]-t)/2:this[e(590)][0]-10-t,s[e(466)]=e(500)}a[e(606)]((t=>{const i=e;if("link"===t.type){const e=s[i(617)](t.content).width;this[i(462)][i(559)]({x:l,y:r,width:e,height:h,url:t.content}),s[i(486)]=i(643),s[i(693)](t.content,l,r),s[i(617)](t[i(577)]);const n=r+this.properties[i(585)];s[i(481)](),s.moveTo(l,n+1),s[i(525)](l+e,n+1),s[i(583)]="#1976D2",s[i(654)]=1,s[i(570)](),s[i(486)]=this[i(644)][i(575)],l+=e}else{const e=s[i(617)](t[i(577)])[i(426)];s[i(693)](t[i(577)],l,r),l+=e}}))}))}createTextEditor(){const e=t;this[e(639)]&&this[e(425)]();const h=LGraphCanvas[e(510)],r=h[e(446)][e(637)](),o=(this[e(565)][0]+h.ds.offset[0])*h.ds.scale,a=(this[e(565)][1]+h.ds[e(460)][1])*h.ds[e(687)];this[e(490)]=document[e(599)](e(572)),this[e(490)].style[e(660)]="absolute",this[e(490)][e(621)][e(500)]=r[e(500)]+o+"px",this.editToolbar[e(621)][e(438)]=r[e(438)]+a-150-50+"px",this[e(490)][e(621)][e(426)]=e(683),this[e(490)][e(621)][e(576)]=e(492),this[e(490)][e(621)].display=e(539),this[e(490)][e(621)][e(647)]=e(627),this[e(490)][e(621)][e(470)]=e(675),this[e(490)].style.zIndex=e(571),this.editToolbar[e(621)].fontSize=e(530),this[e(490)][e(621)].color=e(543);const l=document[e(599)]("div");l[e(621)].display=e(539),l.style[e(450)]="center",l[e(621)].gap=e(675);const g=document.createElement("span");g.textContent=i(e(436)),g[e(621)][e(585)]=e(530),g.style[e(483)]=e(476),l[e(485)](g),this[e(491)]={},[{key:"left",symbol:i(e(456)),title:i(e(624))},{key:e(581),symbol:i("textEditorAlignCenterBtn"),title:i(e(511))},{key:"right",symbol:i(e(685)),title:i(e(651))}][e(606)]((t=>{const i=e,h=document[i(599)](i(516));h[i(592)]=t[i(598)],h.title=t[i(484)],h[i(621)][i(426)]=i(587),h.style.height="24px",h[i(621)][i(694)]=i(555),h[i(621)][i(635)]=i(671),h[i(621)][i(553)]=this[i(644)].textAlign===t[i(689)]?i(451):i(465),h.style[i(679)]="#fff",h[i(621)][i(633)]="pointer",h.style.fontSize=i(667),h.style[i(515)]=i(539),h[i(621)][i(450)]=i(581),h[i(621)][i(473)]=i(581),h[i(524)](i(554),(()=>{const e=i;this[e(644)][e(466)]=t[e(689)],this.updateAlignButtons(),s[e(661)][e(579)](!0)})),this[i(491)][t.key]=h,l[i(485)](h)})),this.editToolbar.appendChild(l);const c=document[e(599)](e(572));c.style[e(515)]=e(539),c[e(621)][e(450)]="center",c[e(621)][e(470)]=e(667);const v=document[e(599)](e(442));v[e(592)]=i(e(557)),v.style[e(585)]=e(530),v[e(621)].minWidth="32px",c[e(485)](v),this.bgColorPicker=document[e(599)](e(429)),this[e(638)][e(657)]=e(679),this[e(638)][e(523)]=this[e(644)][e(553)],this[e(638)].style.width="28px",this.bgColorPicker[e(621)].height=e(614),this[e(638)][e(621)][e(694)]=e(512),this[e(638)][e(621)].borderRadius=e(671),this[e(638)][e(621)][e(633)]="pointer",this[e(638)][e(524)](e(589),(t=>{const i=e;this.properties.backgroundColor=t[i(542)][i(523)],this[i(459)](),s[i(661)][i(579)](!0)})),c[e(485)](this[e(638)]);const d=document[e(599)](e(442));d[e(592)]=i(e(664)),d[e(621)][e(585)]=e(530),c[e(485)](d),this[e(586)]=document[e(599)](e(429)),this[e(586)][e(657)]=e(679),this[e(586)][e(523)]=this.properties[e(575)],this.textColorPicker[e(621)][e(426)]=e(587),this.textColorPicker[e(621)][e(576)]=e(614),this[e(586)].style[e(694)]="none",this.textColorPicker[e(621)][e(635)]=e(671),this[e(586)][e(621)][e(633)]=e(692),this[e(586)][e(524)]("change",(t=>{const i=e;this[i(644)][i(575)]=t[i(542)][i(523)],this[i(459)](),s[i(661)][i(579)](!0)})),c[e(485)](this.textColorPicker),this.editToolbar[e(485)](c);const x=document[e(599)](e(572));x[e(621)][e(515)]=e(539),x[e(621)][e(450)]=e(581),x[e(621)][e(470)]=e(675);const C=document[e(599)](e(442));C.textContent=i(e(596)),C[e(621)].fontSize=e(530),C.style[e(483)]="32px",x[e(485)](C),this[e(628)]=document[e(599)]("input"),this[e(628)][e(657)]=e(533),this.fontSizeSlider[e(691)]="8",this[e(628)][e(595)]=e(634),this[e(628)][e(523)]=this[e(644)][e(585)],this[e(628)][e(621)][e(539)]="1",this[e(628)][e(621)][e(576)]="20px",this.fontSizeSlider[e(524)](e(429),(t=>{const i=e;this[i(644)][i(585)]=parseInt(t[i(542)][i(523)]),this[i(568)].textContent=this.properties[i(585)],this[i(459)](),s[i(661)][i(579)](!0)})),x[e(485)](this.fontSizeSlider),this.fontSizeValue=document.createElement(e(442)),this[e(568)][e(592)]=this.properties[e(585)],this[e(568)][e(621)][e(585)]="11px",this[e(568)][e(621)][e(483)]=e(626),this[e(568)][e(621)].textAlign="right",x.appendChild(this[e(568)]),this.editToolbar[e(485)](x);const L=document[e(599)]("div");L.style[e(515)]=e(539),L[e(621)][e(450)]=e(581),L.style.gap=e(675);const f=document[e(599)](e(442));f[e(592)]=i(e(684)),f[e(621)][e(585)]="11px",f[e(621)][e(483)]="32px",L[e(485)](f),this[e(612)]=document[e(599)]("input"),this[e(612)][e(657)]=e(533),this[e(612)][e(691)]="0",this[e(612)][e(595)]="1",this[e(612)][e(666)]=e(482),this[e(612)][e(523)]=this.properties.backgroundAlpha,this[e(612)][e(621)][e(539)]="1",this[e(612)][e(621)][e(576)]="20px",this.alphaSlider.addEventListener(e(429),(t=>{const i=e;this[i(644)][i(508)]=parseFloat(t[i(542)][i(523)]),this[i(517)][i(592)]=Math[i(434)](100*this[i(644)].backgroundAlpha)+"%",this[i(459)](),s[i(661)][i(579)](!0)})),L[e(485)](this.alphaSlider),this.alphaValue=document[e(599)](e(442)),this[e(517)][e(592)]=Math[e(434)](100*this[e(644)][e(508)])+"%",this[e(517)].style.fontSize="11px",this[e(517)][e(621)][e(483)]=e(626),this.alphaValue[e(621)][e(466)]=e(444),L.appendChild(this[e(517)]),this.editToolbar[e(485)](L);const z=document[e(599)]("div");z.style.display="flex",z[e(621)][e(450)]=e(581),z[e(621)][e(470)]="8px";const p=document[e(599)](e(442));p.textContent=i(e(440)),p[e(621)][e(585)]="11px",p[e(621)][e(483)]=e(476),z[e(485)](p),this.lineHeightSlider=document[e(599)](e(429)),this.lineHeightSlider[e(657)]=e(533),this[e(560)][e(691)]=e(453),this[e(560)].max="3.0",this[e(560)][e(666)]=e(482),this[e(560)][e(523)]=this[e(644)][e(526)],this[e(560)][e(621)][e(539)]="1",this.lineHeightSlider[e(621)][e(576)]=e(659),this[e(560)][e(524)]("input",(t=>{const i=e;this.properties[i(526)]=parseFloat(t[i(542)][i(523)]),this[i(584)][i(592)]=this[i(644)][i(526)][i(601)](1),s[i(661)][i(579)](!0)})),z[e(485)](this[e(560)]),this[e(584)]=document[e(599)](e(442)),this[e(584)].textContent=this.properties.lineHeight[e(601)](1),this[e(584)].style[e(585)]=e(530),this[e(584)][e(621)][e(483)]=e(626),this[e(584)].style[e(466)]=e(444),z[e(485)](this[e(584)]),this[e(490)][e(485)](z),document[e(674)].appendChild(this[e(490)]),this[e(639)]=document[e(599)]("textarea"),this.editTextarea[e(523)]=this[e(644)][e(653)],this[e(639)][e(621)].position=e(522),this.editTextarea[e(621)][e(500)]=r[e(500)]+o+10*h.ds[e(687)]+"px",this[e(639)][e(621)][e(438)]=r.top+a+10*h.ds[e(687)]+"px",this[e(639)][e(621)][e(426)]=(this[e(590)][0]-20)*h.ds[e(687)]+"px",this[e(639)].style[e(576)]=(this[e(590)][1]-20)*h.ds[e(687)]+"px",this[e(639)].style[e(545)]=e(468),this[e(639)][e(621)].border=e(512),this[e(639)][e(621)][e(635)]=e(548),this[e(639)].style[e(535)]="0px",this[e(639)][e(621)][e(669)]=e(512),this[e(639)][e(621)][e(537)]="none",this[e(639)][e(621)].boxSizing=e(631),this[e(639)][e(621)].zIndex=e(506),this.editTextarea.style.textAlign=this[e(644)][e(466)],this[e(459)](),document[e(674)][e(485)](this[e(639)]),this[e(639)].focus(),this[e(639)][e(582)]();const D=()=>{const t=e;this[t(644)][t(653)]=this[t(639)][t(523)],this[t(425)](),this[t(579)](!0,!0),s[t(661)][t(579)](!0)};this[e(658)]=()=>{const t=e;if(this[t(639)]&&this[t(490)]){const s=LGraphCanvas[t(510)],i=s[t(446)][t(637)](),e=(this[t(565)][0]+s.ds[t(460)][0])*s.ds[t(687)],h=(this.pos[1]+s.ds[t(460)][1])*s.ds[t(687)];this[t(639)][t(621)].left=i[t(500)]+e+10*s.ds[t(687)]+"px",this[t(639)][t(621)].top=i[t(438)]+h+10*s.ds.scale+"px",this[t(639)].style.width=(this[t(590)][0]-20)*s.ds.scale+"px",this[t(639)][t(621)][t(576)]=(this[t(590)][1]-20)*s.ds[t(687)]+"px",this[t(490)].style[t(500)]=i[t(500)]+e+"px",this.editToolbar[t(621)][t(438)]=i[t(438)]+h-150-50+"px",this[t(459)]()}};const B=h[e(569)];h[e(569)]=t=>{const s=e;B&&B[s(507)](h,t),this[s(658)]()},this[e(642)]=setInterval((()=>{this[e(658)]()}),16),this[e(639)].addEventListener(e(449),(t=>{const s=e;"Escape"===t[s(689)]?this.removeTextEditor():s(547)===t[s(689)]&&(t[s(487)]||t.metaKey)&&D(),t[s(646)]()})),this[e(652)]=0,this[e(604)]=t=>{const s=e;this[s(652)]++,setTimeout((()=>{const i=s;this[i(652)]--,0===this[i(652)]&&this.editTextarea&&this[i(490)]&&!this[i(639)][i(445)](t[i(542)])&&!this.editToolbar[i(445)](t[i(542)])&&this.isEditing&&D()}),300)},setTimeout((()=>{const t=e;this[t(474)]&&document[t(524)](t(554),this[t(604)],!0)}),200),this.editTextarea[e(524)](e(668),(t=>{setTimeout((()=>{const t=n;this[t(490)]&&this.editTextarea&&!this[t(490)].contains(document[t(603)])&&document[t(603)]!==this[t(639)]&&D()}),100)})),this[e(474)]=!0}[t(459)](){const s=t;this[s(639)]&&(this.editTextarea[s(621)].fontSize=this[s(644)][s(585)]*LGraphCanvas[s(510)].ds.scale+"px",this[s(639)][s(621)][s(679)]=this.properties[s(575)],this[s(639)].style.backgroundColor=this[s(433)](this[s(644)][s(553)],this[s(644)][s(508)]),this[s(639)][s(621)][s(466)]=this[s(644)][s(466)],this[s(639)][s(621)][s(526)]=this[s(644)][s(526)],this[s(639)][s(621)][s(430)]=s(471),this[s(639)][s(621)].paddingLeft=s(548),this[s(639)][s(621)][s(636)]="0px",this.editTextarea[s(621)][s(549)]=s(548),this[s(639)].style[s(504)]="border-box")}[t(556)](){const s=t;Object[s(676)](this.alignButtons).forEach((t=>{const i=s;this[i(491)][t].style[i(553)]=this[i(644)][i(466)]===t?i(451):i(465)}))}[t(425)](){const s=t;this[s(639)]&&(document[s(674)][s(457)](this.editTextarea),this[s(639)]=null),this[s(490)]&&(document[s(674)][s(457)](this.editToolbar),this[s(490)]=null),this[s(642)]&&(clearInterval(this[s(642)]),this[s(642)]=null),this[s(604)]&&(document.removeEventListener(s(554),this[s(604)],!0),this[s(604)]=null),this.isEditing=!1}[t(494)](s){const i=t;s.save(),s[i(481)]();const e=this[i(644)][i(635)];s[i(625)](0,0,this.size[0],this[i(590)][1],e);const h=this[i(644)][i(553)],n=this[i(644)][i(508)];if(s.fillStyle=this[i(433)](h,n),s.fill(),this[i(474)]&&(s[i(583)]=i(451),s[i(654)]=2,s[i(570)]()),s[i(481)](),s[i(625)](0,0,this.size[0],this[i(590)][1],e),s[i(531)](),!this.isEditing){s[i(486)]=this[i(644)][i(575)],s[i(505)]=this[i(644)][i(585)]+"px Arial, sans-serif";const t=this[i(644)][i(585)]*this[i(644)][i(526)],e=this[i(590)][0]-20;this[i(472)](s,this[i(644)][i(653)],e,t)}s[i(529)]()}[t(433)](s,i){const e=t;return e(441)+parseInt(s[e(561)](1,3),16)+", "+parseInt(s[e(561)](3,5),16)+", "+parseInt(s[e(561)](5,7),16)+", "+i+")"}[t(544)](i,e){const h=t;this[h(474)]&&("fontSize"===i&&this[h(628)]?(this[h(628)].value=e,this.fontSizeValue[h(592)]=e):h(575)===i&&this[h(586)]?this[h(586)].value=e:h(553)===i&&this[h(638)]?this[h(638)][h(523)]=e:"backgroundAlpha"===i&&this[h(612)]?(this[h(612)][h(523)]=e,this.alphaValue[h(592)]=Math[h(434)](100*e)+"%"):h(526)===i&&this.lineHeightSlider?(this.lineHeightSlider[h(523)]=e,this.lineHeightValue.textContent=e[h(601)](1)):h(466)===i&&this[h(491)]&&this[h(556)](),this[h(459)]()),this[h(579)](!0,!0),s[h(661)].setDirtyCanvas(!0)}[t(518)](s,i,e){const h=t;if(!this.isEditing&&this.linkAreas&&this[h(462)][h(573)]>0){const t=[i[0]-this[h(565)][0],i[1]-this[h(565)][1]];for(const s of this[h(462)])if(t[0]>=s.x&&t[0]<=s.x+s[h(426)]&&t[1]>=s.y&&t[1]<=s.y+s[h(576)])return this[h(611)](s[h(615)]),!0}return!1}[t(427)](s,i,e){const h=t;if(!this[h(474)]&&this[h(462)]&&this[h(462)][h(573)]>0){const t=[i[0]-this[h(565)][0],i[1]-this[h(565)][1]];for(const s of this[h(462)])if(t[0]>=s.x&&t[0]<=s.x+s[h(426)]&&t[1]>=s.y&&t[1]<=s.y+s[h(576)])return this.openLink(s[h(615)]),!0}return!1}[t(611)](s){const e=t;try{s.match(/^https?:\/\//)||(s=e(632)+s);const t=i(e(623))+"\n\n"+i("linkOpenUrl")+s;confirm(t)&&(e(495)!=typeof window&&window[e(513)]?window[e(513)](s,"_blank"):console[e(629)](e(567)+s))}catch(t){console[e(480)](i("linkOpenError")+":",t),alert(i(e(602))+": "+s)}}[t(655)](s,i,e){const h=t;this[h(474)]||this[h(619)]()}[t(488)](i){const e=t;i&&Array[e(682)](i)&&i[e(573)]>=2&&(this[e(590)][0]=Math[e(595)](i[0],100),this[e(590)][1]=Math.max(i[1],50),s[e(661)].setDirtyCanvas(!0))}[t(630)](s,e){const h=t;e[h(566)]({content:i(h(665)),callback:()=>{this[h(619)]()}}),e.push({content:i(h(574)),callback:()=>{const t=h;this.flags[t(489)]=!this[t(688)][t(489)],this[t(688)].allow_interaction=!this[t(688)][t(489)]}})}[t(499)](s){const i=t;var e,h;null===(e=s[i(618)](i(648)))||void 0===e||e.remove(),null===(h=s[i(618)](i(610)))||void 0===h||h[i(593)]()}[t(435)](s){const i=t;this[i(688)]=this.flags||{},this[i(688)][i(663)]=!this[i(688)][i(489)],this.onDrawBackground(s)}onRemoved(){this.removeTextEditor()}}function n(t,s){const i=a();return n=function(s,e){let h=i[s-=425];if(void 0===n.ZfLvut){n.QLgdQT=function(t){let s="",i="";for(let i,e,h=0,n=0;e=t.charAt(n++);~e&&(i=h%4?64*i+e:e,h++%4)?s+=String.fromCharCode(255&i>>(-2*h&6)):0)e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(e);for(let t=0,e=s.length;t0)for(const e of r.linkAreas)if(t[0]>=e.x&&t[0]<=e.x+e.width&&t[1]>=e.y&&t[1]<=e.y+e[i(576)])return r[i(611)](e[i(615)]),s[i(641)](),s[i(646)](),!1}return o[i(507)](this,s)};const l={processingMouseDown:!1,lastMouseEvent:null,lastClickTime:0},g=LGraph[t(540)][t(578)];LGraph[t(540)][t(578)]=function(s,i,e,n){const r=t;if(e){const t=LiteGraph[r(546)]()-(LGraphCanvas[r(510)]&&LGraphCanvas[r(510)].last_mouseclick?LGraphCanvas[r(510)][r(469)]:0)<300;l[r(564)]&&l[r(673)]&&l.lastMouseEvent[r(657)][r(680)](r(656))&&1===l[r(673)][r(536)]&&!t&&(e=[...e].filter((t=>!(t instanceof h&&t[r(688)][r(489)]))))}return g[r(493)](this,[s,i,e,n])},document.addEventListener(t(498),(function(s){const i=t;l[i(564)]=!0,l[i(673)]=s}),!0),document[t(524)](t(609),(function(){l[t(564)]=!1}),!0),s[t(497)]({name:"小珠光Noto",registerCustomNodes(){h.setUp()}}); -------------------------------------------------------------------------------- /js/cyberpunk-i18n.js: -------------------------------------------------------------------------------- 1 | const t=c;function e(){return window[c(597)]||{}}function i(){return window[c(620)]||function(t){try{return atob(t)}catch(e){return t}}}!function(){const t=c,e=l();for(;;)try{if(504480===parseInt(t(496))/1*(parseInt(t(641))/2)+parseInt(t(653))/3+parseInt(t(698))/4+parseInt(t(564))/5*(parseInt(t(719))/6)+-parseInt(t(783))/7+parseInt(t(420))/8+-parseInt(t(607))/9)break;e.push(e.shift())}catch(t){e.push(e.shift())}}();const o={zh:{mainTitle:t(422),biaotiBtn:t(537),themeBtn:t(749),closeBtn:"关闭",resetBtn:t(723),resetConfirm:t(434),languageLabel:"界面语言:",languageChinese:"🇨🇳 中文",languageEnglish:t(367),themeLabel:t(594),defaultTheme:"🎨 默认主题",cyberpunkTheme:t(372),goldenTheme:t(661),blueTheme:"💙 蓝色主题",greenTheme:t(651),customTheme:"🎨 自定义主题",customThemeBtn:t(619),dynamicLabel:t(747),enabled:t(544),disabled:t(645),animationMode:t(562),animationModes:{particle:"简单粒子 - 圆点移动",streamline:t(701),dataflow:t(429),breath:"呼吸效果 - 平缓律动",dashed:t(592),ultraThin:t(622),dog:t(703),customText:t(508),customImage:t(386)},speed:"速度",size:"大小",count:"数量",glow:"发光",line:"连线",transparency:"透明",lineNote:t(591),customTextLabel:t(461),customTextPlaceholder:"请输入自定义文字...",customImageLabel:t(602),selectImageBtn:"📁 选择图像文件",imageUploadTip:t(477),circuitLabel:t(378),linkLabel:t(500),linkEnabled:t(405),linkDisabled:"❌ 禁用快速连线菜单",magneticConnectionLabel:t(459),magneticConnectionEnabled:t(605),magneticConnectionDisabled:t(487),backgroundLabel:t(491),selectImageBtn:t(394),restoreBackgroundBtn:t(401),fixedBackground:t(396),fillModeLabel:t(659),stretchMode:t(756),tileMode:t(753),customMode:t(458),xPosition:t(374),yPosition:t(444),scalePosition:t(714),backgroundApplied:"✅ 已应用自定义背景",backgroundFixed:t(505),backgroundFillMode:t(688),backgroundDefault:t(780),backgroundNone:t(709),jumpToErrorNode:t(675),noErrorNodesSuccess:t(416),backgroundError:"请先设置自定义背景图像!",backgroundConfirm:t(618),imageTooBig:"图片文件过大,请选择小于5MB的图片文件",imageApplyError:"应用背景图片失败,请重试",configLabel:t(547),exportBtn:"📤 导出配置",importBtn:"📥 导入配置",performanceLabel:"⚡ 性能优化:",performanceModeLabel:t(642),normalMode:t(400),performanceMode:"⚡ 性能模式 (45 FPS)",lowMode:"💾 低配模式 (30 FPS)",lightModeBtn:t(484),disablePluginBtn:t(680),enablePluginBtn:t(782),pluginStatus:t(535),pluginEnabled:t(746),pluginDisabled:t(644),disablePluginConfirm:t(735),customThemeTitle:"🎨 自定义主题编辑器",primaryColor:t(510),secondaryColor:"次色调:",nodeBackground:t(471),nodeText:t(695),nodeBorder:t(603),linkColor:t(737),gradientDirection:t(684),gradientDistance:"渐变距离:",gradientTop:"↑ 从上到下",gradientBottom:t(545),gradientLeft:t(526),gradientRight:t(628),gradientTopLeft:t(721),gradientTopRight:"↗ 从右上到左下",gradientBottomLeft:"↙ 从左下到右上",gradientBottomRight:t(733),applyBtn:"✅ 应用主题",resetBtn:t(446),closeBtn:t(373),configImportSuccess:t(727),configInvalidFormat:t(599),configParseError:"❌ 配置文件解析失败: ",navigateToNode:"🎯 转到",navigateToConnection:t(478),unnamedNode:t(452),outputSlot:"输出",inputSlot:"插槽",port:"端口",node:"节点",quickConnect:t(556),connectSuccess:t(711),connectCount:"个相同名称端口",titleSettings:t(706),titleGradientDirection:"标题渐变方向",titleGradientDistance:t(576),titleAlignMode:t(485),titleAlignLeft:t(543),titleAlignCenter:t(419),titleAlignRight:t(689),titleYPosition:"标题Y坐标(左拉向下,右拉向上)",titleFontSize:t(640),titleColorBackground:"标题背景主色",titleColorBackgroundSecondary:t(717),titleColorText:t(606),fontSelection:t(567),defaultFont:"默认字体",searchFont:t(677),detectingFonts:t(555),refreshFontList:t(588),uploadFont:t(660),resetFont:t(512),customFont:"自定义字体",currentFont:"当前",useDefaultFont:t(399),customFontName:"自定义字体",fontDetected:"已动态检测到",systemFonts:"个系统字体",redetectingFonts:t(578),fontDetectionFailed:t(417),fontUploadSuccess:"上传成功并已应用!",fontUploadFailed:"字体上传失败,请检查文件格式是否正确。",fontResetToDefault:"字体已重置为默认",tabSettings:t(742),tabEffects:t(460),tabStyle:t(691),tabBackground:t(450),tabFont:t(362),basicColors:t(670),titleColors:t(738),linkColors:"🔗 连线颜色",nodeState:t(775),widgetControls:t(558),portTypes:t(548),gradientSettings:t(649),nodeOptions:t(769),linkColorConnecting:"连接中连线",widgetBackground:"Widget背景",widgetBorder:t(379),widgetText:t(626),widgetSecondaryText:t(454),textareaTextColor:t(665),inputBackgroundColor:t(507),nodeFrameLine:t(522),collapseButton:t(392),gradDirectionTop:t(398),gradDirectionBottom:t(707),gradDirectionLeft:t(465),gradDirectionRight:t(438),gradDirectionTopLeft:t(586),gradDirectionTopRight:"↙ 从右上到左下",gradDirectionBottomLeft:t(431),gradDirectionBottomRight:"↖ 从右下到左上",moveUp:"上移",moveDown:"下移",defaultPosition:"默认位置",gradientMenuAdd:t(771),gradientMenuClear:t(377),gradientDialogTitle:t(662),enableTitleGradient:t(445),backgroundGradientSettings:t(736),titleGradientSettings:t(432),colorCountLabel:t(582),solidColor:"纯色",gradientDirTop:t(540),gradientDirTopRight:t(759),gradientDirRight:"从左到右",gradientDirBottomRight:t(679),gradientDirBottom:t(359),gradientDirBottomLeft:t(371),gradientDirLeft:t(710),gradientDirTopLeft:t(412),backgroundColorLabel:t(639),titleColorLabel:t(549),titleTextSettings:"标题文本设置",titleAlignment:"标题对齐",alignLeft:t(466),alignCenter:"居中",alignRight:t(718),titleYPosition:t(360),titleTextColor:"标题文字颜色",up:"向上",down:"向下",generalSettings:t(561),multipleNodes:"个节点",titleImageSettings:t(712),titleImageLabel:t(666),noImageSelected:t(395),imagePreview:"图像预览",portLabel:t(463),nodeLabel:t(669),idLabel:t(441),outputSlotPrefix:"输出",inputSlotPrefix:"插槽",borderRadius:t(421),current:"当前",applyButton:t(751),cancelButton:t(486),titleOnlyRender:t(406),gradientDistanceHint:"💡 调整节点背景渐变过渡距离",magneticRangeLabel:t(705),magneticRangeUnit:"像素",circuitBoardShort:t(687),quickLinkShort:t(389),magneticLinkShort:t(426),highlightOnlyShort:"仅高亮选中",magneticDetectionRange:t(381),linkFunctionTitle:t(616),textEditorDefaultText:t(532),textEditorAlignment:t(777),textEditorAlignLeft:t(466),textEditorAlignCenter:"居中",textEditorAlignRight:t(718),textEditorBackground:t(700),textEditorText:"文字:",textEditorSize:t(516),textEditorTransparency:t(624),textEditorLineHeight:t(499),textEditorEdit:"编辑文本",textEditorPin:t(462),textEditorTitle:"小珠光Noto",textEditorContent:t(527),textEditorFontSize:t(383),textEditorFontColor:"字体颜色",textEditorBackgroundColor:"背景颜色",textEditorBackgroundAlpha:"背景透明度",textEditorBorderRadius:t(752),textEditorPadding:t(673),textEditorLineSpacing:t(652),textEditorTextAlign:t(609),textEditorAlignLeftBtn:"⬅",textEditorAlignCenterBtn:"↔",textEditorAlignRightBtn:"➡",linkOpenConfirm:t(614),linkOpenConfirmTitle:t(635),linkOpenUrl:"链接地址:",linkOpenError:t(518),cyberpunkht:{defaultDisplayName:t(439),settingsTitle:t(410),displayNameLabel:t(464),outputTypeLabel:t(580),outputFloat:t(627),outputInt:"整数",minValueLabel:t(495),maxValueLabel:"📈 最大值:",stepLabel:t(513),sliderStyleLabel:t(664),styleCyberpunk:"Cyberpunk风格",styleOriginal:"原始风格",advancedOptions:t(525),showNodeLabel:"🎛️ 显示节点:",showNodeOn:"显示",showNodeOff:"隐藏",colorSettings:"🎨 颜色设置",trackBgColor:t(577),trackColor:t(648),handleColor:t(473),textColor:"📝 文字颜色:",textSettings:t(676),textSize:t(581),textXOffset:t(415),textYOffset:t(524),previewLabel:"👁️ 实时预览",applyBtn:t(751),cancelBtn:t(486),resetBtn:t(654),errorInvalidNumber:t(699),errorMinMaxRange:t(404),errorStepRange:t(748),errorStepSize:t(632)}},en:{mainTitle:"Cyberpunk Theme Settings 1.0.4",biaotiBtn:"DYNAMIC_DECODE:label_en",themeBtn:t(692),closeBtn:t(368),resetBtn:t(612),resetConfirm:t(572),languageLabel:t(565),languageChinese:"🇨🇳 中文",languageEnglish:t(367),themeLabel:"Select Theme:",defaultTheme:t(475),cyberpunkTheme:t(554),goldenTheme:t(488),blueTheme:"💙 Blue Theme",greenTheme:t(767),customTheme:"🎨 Custom Theme",customThemeBtn:t(762),dynamicLabel:t(455),enabled:t(568),disabled:t(770),animationMode:t(442),animationModes:{particle:"Simple Particle - Dot Movement",streamline:"Simple Transfer - Moving Dot",dataflow:t(725),breath:t(758),dashed:"Dashed Effect - Silver Dashed Line",ultraThin:t(593),dog:t(763),customText:t(569),customImage:t(476)},speed:"Speed",size:t(531),count:t(506),glow:t(451),line:"Line",transparency:t(376),lineNote:t(574),customTextLabel:t(636),customTextPlaceholder:t(443),customImageLabel:t(384),selectImageBtn:"📁 Select Image File",imageUploadTip:"💡 Supports GIF, PNG, JPG formats, images will be compressed to 500x500 for clarity",circuitLabel:t(397),linkLabel:t(730),linkEnabled:"✅ Enable Quick Connection Menu",linkDisabled:t(722),magneticConnectionLabel:"Magnetic Connection:",magneticConnectionEnabled:"✅ Enable Magnetic Connection Animation",magneticConnectionDisabled:t(744),backgroundLabel:"Canvas Background Settings:",selectImageBtn:"📁 Select Background Image",restoreBackgroundBtn:t(515),fixedBackground:t(536),fillModeLabel:"🎨 Background Fill Mode:",stretchMode:t(650),tileMode:t(672),customMode:t(716),xPosition:t(757),yPosition:t(483),scalePosition:"🔍 Scale Ratio (Reset XY to center when adjusting):",backgroundApplied:t(755),backgroundFixed:t(681),backgroundFillMode:t(489),backgroundDefault:t(388),backgroundNone:"⚠️ No custom background image",jumpToErrorNode:"Jump to Error Node",noErrorNodesSuccess:t(530),backgroundError:"Please set a custom background image first!",backgroundConfirm:t(656),imageTooBig:t(550),imageApplyError:t(773),configLabel:t(457),exportBtn:"📤 Export Config",importBtn:"📥 Import Config",performanceLabel:t(601),performanceModeLabel:"🎯 Performance Mode:",normalMode:t(494),performanceMode:"⚡ Performance Mode (45 FPS)",lowMode:"💾 Low-end Mode (30 FPS)",lightModeBtn:t(546),disablePluginBtn:t(657),enablePluginBtn:t(403),pluginStatus:t(407),pluginEnabled:"✅ Enabled",pluginDisabled:t(474),disablePluginConfirm:"Are you sure you want to disable the plugin? This will disable all theme and effect features, keeping only the settings panel.",customThemeTitle:t(762),primaryColor:t(514),secondaryColor:t(490),nodeBackground:t(595),nodeText:"Node Text:",nodeBorder:t(713),linkColor:t(521),gradientDirection:t(523),gradientDistance:t(448),gradientTop:t(663),gradientBottom:t(380),gradientLeft:t(754),gradientRight:"→ Right to Left",gradientTopLeft:t(447),gradientTopRight:t(585),gradientBottomLeft:t(436),gradientBottomRight:t(387),applyBtn:t(469),resetBtn:t(503),closeBtn:t(734),configImportSuccess:"✅ Configuration imported successfully!",configInvalidFormat:t(385),configParseError:"❌ Configuration file parsing failed: ",navigateToNode:t(615),navigateToConnection:t(638),unnamedNode:t(750),outputSlot:t(413),inputSlot:t(658),port:t(693),node:t(694),quickConnect:t(708),connectSuccess:"✅ Connected",connectCount:t(361),titleSettings:t(393),titleGradientDirection:t(690),titleGradientDistance:t(682),titleAlignMode:t(435),titleAlignLeft:t(740),titleAlignCenter:t(551),titleAlignRight:t(552),titleYPosition:t(671),titleFontSize:"Title Font Size",titleColorBackground:t(424),titleColorBackgroundSecondary:"Title Background Secondary",titleColorText:t(573),fontSelection:"🔤 Font Selection",defaultFont:t(369),searchFont:t(559),detectingFonts:t(467),refreshFontList:t(504),uploadFont:"📁 Upload Font",resetFont:t(720),customFont:t(427),currentFont:t(732),useDefaultFont:t(363),customFontName:t(427),fontDetected:t(589),systemFonts:"system fonts",redetectingFonts:"🔍 Re-detecting system fonts...",fontDetectionFailed:t(637),fontUploadSuccess:t(743),fontUploadFailed:t(617),fontResetToDefault:"Font has been reset to default",tabSettings:t(776),tabEffects:"🔗 Links",tabStyle:t(724),tabBackground:"🖼️ Background",tabFont:t(408),basicColors:"🎨 Basic Colors",titleColors:"📝 Title Colors",linkColors:t(479),nodeState:t(563),widgetControls:t(779),portTypes:t(409),gradientSettings:t(542),nodeOptions:t(534),linkColorConnecting:"Connecting Link",widgetBackground:t(456),widgetBorder:t(425),widgetText:t(697),widgetSecondaryText:t(668),textareaTextColor:t(766),inputBackgroundColor:"Input Background Color",nodeFrameLine:t(365),collapseButton:t(761),gradDirectionTop:t(571),gradDirectionBottom:t(575),gradDirectionLeft:"→ Left to Right",gradDirectionRight:t(391),gradDirectionTopLeft:"↘ Top-Left to Bottom-Right",gradDirectionTopRight:t(528),gradDirectionBottomLeft:t(587),gradDirectionBottomRight:t(566),moveUp:t(643),moveDown:t(613),defaultPosition:t(511),gradientMenuAdd:t(729),gradientMenuClear:"Clear Gradient Theme",gradientDialogTitle:t(590),enableTitleGradient:t(502),backgroundGradientSettings:t(764),titleGradientSettings:"Title Gradient Settings",colorCountLabel:t(411),solidColor:t(533),gradientDirTop:t(728),gradientDirTopRight:t(768),gradientDirRight:"Left to Right",gradientDirBottomRight:t(470),gradientDirBottom:t(492),gradientDirBottomLeft:t(440),gradientDirLeft:t(646),gradientDirTopLeft:t(560),backgroundColorLabel:t(481),titleColorLabel:t(553),titleTextSettings:t(674),titleAlignment:t(435),alignLeft:t(740),alignCenter:"Center Align",alignRight:t(552),titleYPosition:"Y Position (Move Up)",titleTextColor:t(573),up:"Up",down:t(696),generalSettings:t(358),multipleNodes:t(493),titleImageSettings:t(529),titleImageLabel:t(402),noImageSelected:t(472),imagePreview:t(579),portLabel:"Port: ",nodeLabel:t(604),idLabel:t(538),outputSlotPrefix:"Output",inputSlotPrefix:t(658),borderRadius:"Border Radius",current:t(732),applyButton:t(557),cancelButton:t(678),titleOnlyRender:t(633),gradientDistanceHint:t(610),magneticRangeLabel:"Magnetic Range",magneticRangeUnit:t(608),circuitBoardShort:t(726),quickLinkShort:t(596),magneticLinkShort:t(784),highlightOnlyShort:"Highlight Only",magneticDetectionRange:t(449),linkFunctionTitle:"🔗 Link Functions:",textEditorDefaultText:t(430),textEditorAlignment:t(517),textEditorAlignLeft:t(740),textEditorAlignCenter:t(600),textEditorAlignRight:t(552),textEditorBackground:t(453),textEditorText:t(375),textEditorSize:"Size:",textEditorTransparency:t(519),textEditorLineHeight:"Line Height:",textEditorEdit:t(382),textEditorPin:t(583),textEditorTitle:t(731),textEditorContent:t(428),textEditorFontSize:t(647),textEditorFontColor:t(774),textEditorBackgroundColor:t(481),textEditorBackgroundAlpha:t(623),textEditorBorderRadius:t(634),textEditorPadding:t(539),textEditorLineSpacing:t(765),textEditorTextAlign:t(423),textEditorAlignLeftBtn:"⬅",textEditorAlignCenterBtn:"↔",textEditorAlignRightBtn:"➡",linkOpenConfirm:t(366),linkOpenConfirmTitle:t(625),linkOpenUrl:t(520),linkOpenError:"Failed to open link",cyberpunkht:{defaultDisplayName:t(509),settingsTitle:t(685),displayNameLabel:t(584),outputTypeLabel:"🔢 OUTPUT TYPE:",outputFloat:t(655),outputInt:t(498),minValueLabel:"📉 MIN VALUE:",maxValueLabel:t(433),stepLabel:t(621),sliderStyleLabel:"🎨 SLIDER STYLE:",styleCyberpunk:t(364),styleOriginal:"Original Style",advancedOptions:t(437),showNodeLabel:t(778),showNodeOn:t(760),showNodeOff:t(414),colorSettings:t(418),trackBgColor:t(741),trackColor:t(598),handleColor:"🔘 HANDLE COLOR:",textColor:"📝 TEXT COLOR:",textSettings:t(704),textSize:t(611),textXOffset:t(702),textYOffset:t(497),previewLabel:t(772),applyBtn:t(715),cancelBtn:"❌ CANCEL",resetBtn:"🔄 RESET",errorInvalidNumber:t(570),errorMinMaxRange:t(468),errorStepRange:t(781),errorStepSize:t(630)}}};let n="zh";function r(r){const g=t;let l=o[n][r]||o.zh[r]||r;if(g(631)==typeof l&&l[g(629)](g(370))){const t=l[g(667)](g(370),""),o=e(),n=i();if(o[t]&&n)try{l="🎬 "+n(o[t])}catch(t){l=g(390)}else l="🎬 Cyberpunk Theme"}return l===r&&o[n]&&o[n][r],l}function g(){}function l(){const t=["8j+uJsdPH43MLRdMO4dMTyVNS7VNU5/LRzFKVzmUlI4","sw1Hz2uGuhjLDMLLDW","8j+uOIdOVPpLH7RNSBVLNOS6","8j+tJYdMLOFLRzFLPkFLSi86","6AkC6iMY5PwW6yEp","ugLUie5Vzgu","8j+pT++4JYbesvnqtefzie5btuu6","4OAxifrVCc1sAwDODcb0BYbcB3r0B20TtgvMDa","4OAyios7JUw3PUs4IUwiSowpS+s4IW","4OAxiejVDhrVBs1mzwz0ihrVifrVCc1sAwDODa","8j+uHcdLIlFMLRa","rgv0zwn0zwq","r3jHzgLLBNqGq29SB3iGu2v0DgLUz3m","8j+sOsdOV57NUR/ORR7KUlOW5PE25y+Q5PI+56s65yQO55s75Pwi5P6C","6jMA57Q/5Pwi5P6Cic0G6zo26iMY6jMA57Q/","vwX0CMeGvgHPBIaTiejYAwDODcbtAwX2zxiGqMvHBq","6ycj5OUP5lI76Aky77YA","tM9KzsbcywnRz3jVDw5KoG","uxvPy2SGtgLUAW","q09orKLhx0rbvee","8j+oQcbuuKfdsYbdt0XpuJO","4P2mioAxOoAvIoEAHoMfJEE9RUAwH+s7TUAGVow8JW","q2vUDgvY","4PQHifbLCMzVCM1HBMnLie9WDgLTAxPHDgLVBJO","8j+wVo+4JYdOH6RLRPRKUyNLM77LG4/VVjO","6iQc54k56l655Qgg77YA","tM9KztOG","4PYfiowqR+EuQoEJGEAaP+I/NUE6V+wkQoEuUW","5Qch6Aky5PAh5PYS","mZe4mJiZntnRrgjosLi","CgL4zwXZ","5PAh5PYS5A+56B2q","8j+sOsbbzgP1C3qGBM9KzsbIywnRz3jVDw5KigDYywrPzw50ihrYyw5ZAxrPB24GzgLZDgfUy2u","8j+tJYburvHuifnjwKu6","uMvZzxqGq29UzMLN","tw92zsbeB3DU","5PIV5zcM6kAb5zYO5PAW56Qx5y+J5lIT5OMt5BYa6zo+5O6L77YF","8j+oRYbhBYbuBW","8j+uLYdOV57NUR/LIP/OG73VVjO","rM9UDcb1CgXVywqGzMfPBgvKlcbWBgvHC2uGy2HLy2SGAwyGDgHLigzPBguGzM9YBwf0igLZignVCNjLy3qU","56gU5A6A6kAb5OgI5Asn6BUy6k6K6iom5PMV5zcx77YF","8j+oQcdOH6RLRPRKUyNKUlVPOPJNVjBOVPhLMAG","zgvJB2rLqxv0Ag9Y","4PQHifnurva6","6lAf57Ug5Rwb5ywjic0G5lQU6zo26iMY5ywj5P2F","qMfJA2DYB3vUzcbbBhbOyq","6ycp5PIooG","q29UzMLYBsbpCgvUieXPBMS","v2LKz2v05PAh5PYS","5RwU54k55PwW","4OAsios7JUwpS+wiSow3PG","C3rHCNrZv2L0Aa","u3rLCcbTDxn0igjLihDPDgHPBIbYyw5Nzse","C3rYAw5N","5Q2L6zw/5lIn6io95AsN5lQo6iYd5zU077Yb","8j+oRYbuAxrSzsbpBMX5ifjLBMrLCIaOtM8GtM9KzsbcywnRz3jVDw5Kkq","qM9YzgvYifjHzgL1CW","56gU6k6K5OMt5BYa6zo+5O6L","4PYn77Ipien1C3rVBsbuzxH0oG","4P2mierLDgvJDgLVBIbMywLSzwq","8j+oRYbhBYbuBYbdB25Uzwn0Aw9U","6iom5PMV6iMY","5Qch6Aky5A2x5l2t5AsN5Bcp","mLLOEeXhsq","8j+oRYdMGkFOG73MQkhLVi/VVjO","tw92zsbvCa","8j+AQYdLT7lNPOhNLkG","5BEY5ywZ6zET","uMLNAhqGDg8GtgvMDa","rM9UDcbtAxPL","8j+oQcdMU5hPGzpPOPZOIBi6","8j+oQcdMUjdLJ5JORR7NVA4","8j+uHcbtDhjLDgnOihrViezPBgWGkeLTywDLihn0CMv0y2HLzcb0BYbZy3jLzw4GC2L6zsK","8j+sMIdNU7/OIBlKUlVPOPG","6kgm6zE06lED","mtuXmZmWnvvZDLzdyG","8j+uHcaG6yEn572U","rMXVyxq","qxjLihLVDsbZDxjLihLVDsb3yw50ihrVihjLC3rVCMuGDgHLigrLzMf1BhqGyMfJA2DYB3vUzd8","8j+AQYbeAxnHyMXLifbSDwDPBG","u2XVDa","8j+oQcdOG4ZMMA/LOAVLHyxMQkhLVi/VVjO","8j+tGsdKUiRKVkdLRzFKVzm","4PYOioM7HoMhKEs4U+MIMa","5RIq5y+y6AkC6iMY6k6+572U","4OArifrVCcb0BYbcB3r0B20","8j+oQcdMU5hMNAhPO47MOlW6","5PAh5PYS57Yw6l6r5zMO5PAh5PYS6AkC6iMY","5Qch6Aky5zU+5yop","CMvWBgfJzq","v2LKz2v0ifnLy29UzgfYEsbuzxH0","6iQc54k577YA","8j+oQcdLN7RMNkZPOPZOIBi","vgL0BguGwsbqB3nPDgLVBIaOtgvMDdPeB3DUlcbsAwDODdPvCcK","8j+oRYblzwvWiefZCgvJDcbsyxrPBYbuAwXLicHnywLUDgfPBIbVCMLNAw5HBcbZAxPLigfUzcbYzxbLyxqP","5yAf6l656lED","vgL0BguGvgv4Dcbtzxr0Aw5NCW","6lEZ6l2S5yIW5OQL6zsz6iQc54k5","8j+tNsdMLOFLRzFORR7NVA4","8j+uJsdMKjZNTklLRzFKVzmUlI4","4P2mienHBMnLBa","5lUo5BEM5lIl5yIW5y+Z5lIk","8j+AQYdNPOhNLkJMJ5lKU7y","8j+uKIbgAxHLzcbTB2rLoG","vgL0BguGr3jHzgLLBNqGrgLZDgfUy2u","z2v0vgv4Da","5RIq5y+y5PA55zcr77YA","8j+oRIbdwujfuLbvtKSGu0vuveLor1m","z2v0q3vYCMvUDeXHBMD1ywDL","55s16lEV5P2/","8j+oQcdLOAVLHyxMQkhLVi86","6z2G5y+Z5A+56B2q","vgL0BguGr3jHzgLLBNqGrgLYzwn0Aw9U","8j+oQcdPO47MOlW","8j+oQcbuAgvTzsbtzxr0Aw5NCW","ug9YDa","tM9Kzq","6iQc54k55PAh5A2x77YA","rg93BG","v2LKz2v0ifrLEhq","mZGZmtqZnLvZu01YCq","6k+36l6t5ywL5PYj5Pwi55Qe5PwW5A2x77Yb","6iom5PMVoG","566a5y2v5lYG6l6tic0G5B+R6ycF56E75yQO54k5","4OAu77IpifrfwfqGwcbprKztrvq6","5y+V54IX54Ux54UxipcFKlyGlsdNROdLJzxNP7VLIQG","8j+tNsburvHuifnfvfrjtKDt","56ob5OcN6l+E5O6L6iYd5zU0","8j+tNsdMOiFPOPJORR7NVA4","4OArios7JUs4I+wiSos4IG","8j+uJcbrDwLJAYbdB25Uzwn0ifnHBwuTtMfTzsbqB3j0CW","4PQG77IpioAxOoIhQUwUMUs5IEIdJoAzR+wBVUwdJW","5lUo5y+Z5yIW5BEM","4PYfiow3SUI/NUAoPq","5Qch6Aky5zU+5yop6k6+572U","tM9KzsbcB3jKzxi6","8j+uJsdNVkNMLl7MR5tKVOVVViJOSipMLBtML7BPH43NVA5ywEwiSos4REw/G++8IE+8MG","4PYfiefqueXz","8j+tJsbdDxn0B20Gug9ZAxrPB24GkfnLDcbWB3nPDgLVBIbHBMqGC2nHBguP","5Qch6Aky6iom5PMV5QYH6iMY","5y+Z5A+56B2q","ntm3ntiWmNDPAMn4tq","8j+uHcbszxnLDa","4OAwios7JUw3PUs4IUwiSowpS+s4IW","4P2mierPC2fIBguGuxvPy2SGq29UBMvJDgLVBIbnzw51","6yEn572U6ywn572U","8j+oQcbtDhLSzq","rgf0ysbgBg93ic0GuMvJDgfUz2XLifbHy2TLDhm","q2LYy3vPDcbcB2fYza","4PYfioMfJEE9RUwVVowfPEAiKowkN++8Gq","vg9WihrViejVDhrVBq","qwrKieDYywrPzw50ifrOzw1L","uxvPy2SGq29UBMvJDgLVBJO","5Bcp54+G5ywjtM90BW","q3vYCMvUDa","4OAyios7JUwpS+s4I+wiSow3PUs4IG","4P2mienSB3nL","56gU5A6A6kAb56Ab55sO5O+s5lU25zcx77YF6l+z5Bcg56Ab55sO5OMa5PYj5lI76Aky5zkm54M55Pwi5yQF6io977Ym5y+Q5l+D55wz6k6+572U6z2I5P2/44cc","6iQc54k56iom5PMV5RIq5y+y6k6+572U","6l+E5O6L57Q/77YA","8j+tNsdMOiFPOPJPOPZOIBi","B25jmtHUtg9HzgvK","tgvMDcbbBgLNBG","8j+mQ++4JYbuuKfdsYbcqunlr1jpvu5eoG","4PQz77IpioIUVUE9RG","DxbSB2fKzwqGC3vJy2vZC2z1BgX5igfUzcbHChbSAwvKiq","4P2mierPC2fIBguGtwfNBMv0AwmGq29UBMvJDgLVBIbbBMLTyxrPB24","A2v5CW","4PYfiow3SUwqR+EuQa","5yQO5Ocb6l+E57Q/5Pwi5P6C77YA","5Q2L6zw/5B+f6Ag75AsN5lQomo+8Gq","8j+oQcdKUlVPOPJORR7NVA4","vw5Uyw1LzcboB2rL","4PYfiow6LoEuQa","5zYg6kEs5AsN5Bcp","8j+oRYdKV53MJihMR5tKVOVLUBpPK7RVViJKV53MJihLJP/LP4VLSlRLR7JPH43LPi3VViK","4OAqieXLzNqGDg8GuMLNAhq","4PYfien1C3rVBsbIywnRz3jVDw5KigfWCgXPzwq","8j+uHcdMI4NKVlJPK7RMU6hVViJLM77LG4/MI4NKVlJOH7pLSy/LUzxLPkFLSi/VViK","8j+tJsbyifbVC2L0Aw9UicGXpuXLzNqGzwrNzsWGmtaWpvjPz2H0igvKz2uPoG","qNjLyxrOievMzMvJDcaTieDLBNrSzsbsAhL0Ag0","5lUo5BEM5lIk5yIW5y+Z5lIl","u2HVDW","q29SBgfWC2uGqNv0Dg9U","8j+oQcbdDxn0B20GvgHLBwuGrwrPDg9Y","q3v0zsbeB2CG8j+qTIaTifnPBxbSzsbnB3zLBwvUDa","tM9KzsbcywnRz3jVDw5KieDYywrPzw50ifnLDhrPBMDZ","tgLUzsbtCgfJAw5N","vgv4DgfYzweGvgv4DcbdB2XVCG","8j+sMIbhCMvLBIbuAgvTzq","vg9WluXLzNqGDg8GqM90Dg9TlvjPz2H0","8j+oM++4JYdOIOlNGRNPGiNPOBK","rgLZywjSzwq","6k6+6k6H54US56Ul5RIq5y+y5lI76Aky","8j+rGE+4JYbmsvzfifbsrvzjrvC","rMfPBgvKihrVigfWCgX5igjHy2TNCM91BMqGAw1Hz2uSihbSzwfZzsb0CNKGywDHAw4","rM9UDcbdB2XVCG","8j+oM++4JYdOIOlNGRNNIRBMGie","4PQz77IpifnLDhrPBMDZ","5A+56B2qoG","8j+oM++4JYbtse9xie5preu6","8j+uPYbxAwrNzxqGq29UDhjVBhm","8j+tIYdKVB/NLkHdB21MEvvj5y6F55sF6iom5PMV","u3rLCcbTDxn0igjLigDYzwf0zxiGDgHHBIaWiq","4PYfiowqR+EuQoApKUs7TG","mti1nJyXoxPLrfLHuq","twfNBMv0AwmGtgLUAW","r2vUzxjHBcbtzxr0Aw5NCW","5lUo5lIl5yIW5lIk","wEwDKoAGHYaO5zcr5lIk56E75yQOkq","C2fTzs1Uyw1LihbVCNrZ","8j+uPcdLRzFKVzm","vxnPBMCGzgvMyxvSDcbMB250","q3LIzxjWDw5Rifn0EwXL","tM9KzsbgCMfTzsbmAw5L","rg8GEw91ihDHBNqGDg8GB3bLBIb0AgLZigXPBMSGAw4GysbUzxCGD2LUzg93pW","8j+hUVcFH7GGrw5NBgLZAa","q2XVC2u","rgvMyxvSDcbgB250","rfLoqu1jq19erunpreu6","5lUo5y+Z5lIl5yIW5BEM5lIk","8j+mIcbdEwjLCNb1BMVKUlVPOPG","4P2miowfS+MxRq","8j+tJsby5z2q5Qch77Yimt3LT6BOVRNNVjJVViWXmda95y+Z6l6557Yy77Yj77YA","vgv4DdO","qwXWAge","5RIf6zMK5Qch6k6W5RIq5y+y5lI76Aky","55s16lEV5P2/6l+E57Q/77YA","v2LKz2v06l655Qgg","4OAtiejVDhrVBsb0BYbuB3a","5Qoa5Rwl6iYd5zU0","rwrPDcbuzxH0","5A2x5l2t5AsN5Bcp","8j+wVo+4JYbdDxn0B20Gsw1Hz2u6","4P2mieLUDMfSAwqGy29UzMLNDxjHDgLVBIbMAwXLigzVCM1HDa","6iEQ5A6A5lMj5zU+5yopipcFLRZVUi8GlsdKUiRKVkbhsuyVue5hl0PqrW","4OAyiejVDhrVBs1sAwDODcb0BYbuB3aTtgvMDa","8j+tIYbvC2LUzYbdB21MEvvjig5HDgL2zsbIywnRz3jVDw5K","5B+R6ycF6l+E57Q/","8j+oRcbdEwjLCNb1BMSGvgHLBwu","4OAqifjPz2H0ihrVieXLzNq","5OQy5y+G5OYj6zkU","8j+tNsbuAxrSzsbtzxr0Aw5NCW","8j+tGsdPGiNMI6NOG4ZMMA/LM77NIyC","5PEG5zU+5yop","8j+uKIdLM7RLRPROG4ZMMA/VViJNP7VLIQJOIOlNGRNML7BOG4ZMMA/KUi3OT5/PMO/VViK","q2LYy3vPDcbcB2fYzcbmAw5RCZO","4OAtios7JUs4IUwiSos4IW","5l2/55sO6BUy6k6K5A2x5l2t","8j+AGcdMRApLUlJMQkhLVi8GkdyWiezquYK","8j+uHcdMGAlLPi3PU5JORQq","vgL0BguGsw1Hz2u","4PYfievUywjSzsbqBhvNAw4","5PYa5Bcp5yc85B+f6Ag75Bcp5lQo5PYa5AsN5yc877Yb","4PYfiowqR+EuQow/Q+MaN+I/NUE6V+IpNownLq","8j+oRYdKU4xMUllMN5pMOiFPOPJVViJKUi3MUllMN5pOIOlNGRNOG4ZMMA/VViK","ugX1z2LUifn0yxr1CZO","8j+uPcbgB250","8j+uJcbqB3j0ifr5CgvZ","8j+oRIbdwujfuLbvtKSG6k6+572U","q29SB3iGq291BNq","5lUo5y+Z5lIk5yIW5BEM5lIl","t3v0Chv0","sgLKzq","4OAu77IpifJLGy/NP7S6","5RkH5PYj5y+r546W6zsz6k+V6iQc54k5","4P2miowkQoAaGEAJGoA1I+wKSEI0Pq","8j+oQcbdt0XpuIbtrvrusu5huW","5Bgf5lIT5A+56B2q","nZmYoduWngP5BgrYBG","6l656kEs5zYg6kEs","q3LIzxjWDw5Rios4U+MIMoIUVUE9RJeUmc40","vgv4DcbbBgLNBM1LBNq","vgL0BguGqMfJA2DYB3vUzcbqCMLTyxj5","v2LKz2v0iejVCMrLCG","56ob5OcN6l+E57Q/","q3vZDg9TiezVBNq","vgv4DcbdB250zw50","5PwW5O2U5Rwbic0G55+P5B2I5PwW5O2U5yYf","rg91yMXLlwnSAwnRihrVigvKAxqGDgv4Dc4UlG","4OAxios7JUw3PUs4I+wiSowpS+s4IG","5Qch6Aky5RIq5y+y6k6+572U","8j+tIcbnqvGGvKfmvuu6","56gU5A6A6kAb6yEn572U5OMa5PYj6ywn572U5yIW6BUy6k6K5yc85zcx77YF6l+z5Bcg5RIf6zMK5OMa5PYj6iEQ5A6A5lMj6k6+572U44cc","vgL0BguGqwXPz25Tzw50","4OAziejVDhrVBs1mzwz0ihrVifrVCc1sAwDODa","8j+uPYbbrfzbtKnfrcbpufrjt05t","4OAqios7JUwpS+wiSow3PG","5y+Z6zsU5y+V6k6+572U6iYd5zU0l+wqJEENSa","qM90Dg9TlvjPz2H0ihrVifrVCc1mzwz0","sutVVjO","qw5PBwf0Aw9Uie1Vzgu6","rw50zxiGy3vZDg9TihrLEhqUlI4","8j+tJsbz5z2q5Qch77Yimt3LUPxPG6JOVRNNVjJVViWXmda96Ag26yoO6l6557Yy77Yj77YA","5zcV55sO5Qch6Aky54US56Ul5RIq5y+y","8j+uHcdPH43NVA7KUlRPU5JORQq","4OAwifrVCc1mzwz0ihrViejVDhrVBs1sAwDODa","r3jHzgLLBNqGrgLZDgfUy2u6","rgv0zwn0Aw9UifjHBMDL","8j+wVo+4JYdOG4ZMMA8","r2XVDW","5PYQ5zg95zcn6iQc54k5","qMfJA2DYB3vUzdO","v2LKz2v05QYH6kAb5PAh5PYS","rhLUyw1PyYbmAw5RievMzMvJDhm6","v2LKz2v0iejHy2TNCM91BMq","4PQz77IpienVBMzPz3vYyxrPB24GtwfUywDLBwvUDdO","8j+tJsdOH6RLRPRKUyNKVy3NVA7VViJLJ6/ORR7NVA7KVy3NVA7LKOZNVkNMLl7VViK","56ob5OcN6l+E57Q/77YA","8j+uLYdNUR/MNAe","4PYn77IpioIhQUwUMUs5IEAwH+wTL++8MG","5zU65A6A6iQc54k5","5B+R6ycF56E75yQO56UV5y+J77YA","8j+pT++4JYdMMl7NPlRLKi3NP7a6","4OAsios7JUw3PUwiSowpSW","5BEM5A+56B2q","8j+uJsbezxrLy3rPBMCGC3LZDgvTigzVBNrZlI4U","twLUihzHBhvLig11C3qGyMuGBgvZCYb0AgfUig1HEcb2ywX1zse","4PYfiefWCgX5ifrOzw1L","qM90Dg9TluXLzNqGDg8Gvg9WlvjPz2H0","6iQc54k56iom5PMV77YA","tM8Gsw1Hz2u","8j+uMcdMU5hLNzFPOPZOIBi6","8j+AQYbeAxnHyMXLza","8j+oQcbezwzHDwX0ifrOzw1L","q3vZDg9TieLTywDLipcFLRZVUi8GlsbvCgXVywqGr0Lgl1borY9kueC","8j+sOsdMLk/MJieGr0Lg44cbue5h44cbsLbhioAGVow8J++8JowBVUwdJ+wWHUwoI+E8QEIhSZuWmhG1mddKV53MJihMUixMMBa","8j+oRYdOVAZLIldOV57MJQxNGRK","8j+uLYbmAw5RienVBg9YCW","q3LIzxjWDw5Rste4BG","qMfJA2DYB3vUzcbdB2XVCG","DxbKyxrLr3jHzgLLBNroB2rLq29SB3jZtgfUz3vHz2u","8j+tJsbzifbVC2L0Aw9UicGXpujVDhrVBsbLzgDLlcaXmda9vg9WigvKz2uPoG","8j+QTIdOVBVPH4/MQkhLVi8","5Qch6Aky5A+56B2q5PA55BYp","4P2miowpLUA2Ia","4P2mioEMGEEuQoEJGEAaP+I/NUE6V+wkQoEuUW","4PYOieDVBgrLBIbuAgvTzq","8j+oQcbgAwXSig1Vzgu6","u2vJB25Kyxj5ienVBg9YoG","55s75BId6iom5PMV6k6+572U77YA","qM90Dg9TihrVifrVCa","tM9Kzxm","8j+AGcboB3jTywWGtw9KzsaOnJaGrLbtkq","8j+tIsdMNidLSi/LGlW6","otq1ntKWwgXJAM5X","4OAv77IpifrfwfqGwsbprKztrvq6","sw50zwDLCG","6kgm6lEDoG","5B+R6ycF6l+E57Q/77YA","zNvUy3rPB24","rw5HyMXLieLUzgvWzw5Kzw50ifrPDgXLieDYywrPzw50","8j+uHcbszxnLDcb0BYbezwzHDwX0","8j+uHcbszwzYzxnO","8j+uKIdLM7RLRPRMQkhLVi86","q291BNq","6l6t5ywL5Qgg6iom5PMV6AkC6iMY","6iEQ5A6A5lMj5PAh5A2xiokCJE+4JYaTioEuQoAiT+I+K+wfPEAwH+wTLW","uMLNAhqTy2XPy2SGDg8GC2v0ihjHBMDLl25HBwu","5lI76iMY6lcd77YA","rgvMyxvSDcbqB3nPDgLVBG","8j+uHcdPH43NVA4","4PQHioATPEMvVZO","uhjPBwfYEsbdB2XVCJO","8j+uHcbszxn0B3jLierLzMf1Bhq","5AsN5BcpoG","qwXPz246","5PEG5Rov5OMt5BYa6zo+5O6L","qwXWAge6","vvjmoIa","tgLUAYbdB2XVCJO","6iQc54k55Qgg57Q/","r3jHzgLLBNqGrgLYzwn0Aw9UoG","4OAv77IpifNLGy/NP7S6","8j+uPYdPQ5JNUQFPGiNPOBK","4OAqios7JUw3PUwiSowpSW","5PAh5PYS5yAf5A65","4OAzifrVCc1sAwDODcb0BYbcB3r0B20TtgvMDa","vgL0BguGsw1Hz2uGu2v0DgLUz3m","tM8GzxjYB3iGBM9KzxmGzM91BMq","u2L6zq","5y+m5yE757Yw6l6r5PAh5PYSlI4U","u29SAwqGq29SB3i","8j+oM++4JYboB2rLie9WDgLVBNm","5O+s5lU254Q25Ocb77YA","8j+uKIbgAxHLzcbcywnRz3jVDw5KicHcywnRz3jVDw5KigrVzxnUj3qGzM9SBg93ihDOzw4GBw92Aw5Nig5VzgvZkq","rfLoqu1jq19erunpreu6BgfIzwXFEMG","suq6ia","ugfKzgLUzW","5lUo5lIk5yIW5lIl","y3vYCMvUDeXHBMD1ywDL","8j+oQcbhCMfKAwvUDcbtzxr0Aw5NCW","6z2G5BEM5A+56B2q","5BEY5BYa5zcV","4OAtios7JUs4I+wiSos4IG","8j+QTIbmAwDODcbnB2rL","4PQz77IpioMfJEE9RUEUOEEqHU+8MG","8j+uJcdNQ6/LJ6pNSBVLNOS","5Qch6Aky6iMY","sw1Hz2uGzMLSzsbPCYb0B28GBgfYz2uSihbSzwfZzsbZzwXLy3qGyw4GAw1Hz2uGzMLSzsbZBwfSBgvYihrOyw4Gnu1c","q2vUDgvYiefSAwDU","uMLNAhqGqwXPz24","vgL0BguGq29SB3i","8j+mIcbdEwjLCNb1BMSGvgHLBwu","8j+uJsdMRApLNkJMO4dMTyVNS7VNU5/LRzFKVzmUlI4","8j+uJcdLV6VPGj/OV57MJQxNM7JLKiZLKi3NP7dNQ6/LJ6m","4PYfiefWCgX5","8j+uPYbxAwrNzxtMJQFKU7y","8j+uJsbtzwfYy2GGzM9UDhmUlI4","vg9WlvjPz2H0ihrViejVDhrVBs1mzwz0","6ycA55sO6k6+572U","5yQO55s75QIH5BYp77YA","8j+oM++4JYboB2rLifn0yxrL","nvvtu3PZCa","sw50zxjMywnLieXHBMD1ywDLoG","4OAwiejVDhrVBs1sAwDODcb0BYbuB3aTtgvMDa","8j+uPcdLRzFKVzpPGiNMI6K","rw5HyMXLza","q3vZDg9TifrLEhqG4PYn77Ipic0GvxnLCIbjBNb1DcbuzxH0","ugXLyxnLigvUDgvYigeGDMfSAwqGBNvTyMvYiq","4OAtifrVCcb0BYbcB3r0B20","qxjLihLVDsbZDxjLihLVDsb3yw50ihrVihjLC2v0igfSBcbJB25MAwD1CMf0Aw9UCYb0BYbKzwzHDwX0ihzHBhvLCZ8GvgHPCYb3AwXSignSzwfYigfSBcbJDxn0B20GC2v0DgLUz3mU","vgL0BguGvgv4DcbdB2XVCG","8j+sOsbmAw5LihnLDcb0BYaWihnOB3DZigfUAw1HDgLVBIbLzMzLy3rZig9UBhK","4OAriejVDhrVBsb0BYbuB3a","5Qch6Aky5RIq5y+y6lED56A7","8j+mQ++4JYdMU5hPGzpOG4ZMMA86"];return(l=function(){return t})()}function a(e){const i=t;return!!o[e]&&(n=e,window[i(541)]=n,this)}function d(){return n}function c(t,e){const i=l();return c=function(e,o){let n=i[e-=358];if(void 0===c.qmwlNj){c.bXxLdq=function(t){let e="",i="";for(let i,o,n=0,r=0;o=t.charAt(r++);~o&&(i=n%4?64*i+o:o,n++%4)?e+=String.fromCharCode(255&i>>(-2*n&6)):0)o="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(o);for(let t=0,o=e.length;t{const e=t;window.onI18nLoaded&&e(501)==typeof window[e(739)]&&window[e(739)]()}),100); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🌈 ComfyUI 赛博朋克主题插件|Cyberpunk Theme Plugin 2 | 3 | *一个全面的 ComfyUI 主题插件,提供炫酷的赛博朋克美学和强大的自定义功能* 4 | *A comprehensive ComfyUI theme plugin with stunning cyberpunk aesthetics and powerful customization features* 5 | 6 | ## 📺 **教学视频 | Tutorial Video** 7 | 8 | 🎬 **[首个]自定义主题管理器Comfyui主题完全DIY-CYBERPUNK-STYLE-DIY-上线啦!** 9 | 📺 [观看教学视频 | Watch Tutorial Video](https://www.bilibili.com/video/BV1HuTizBEdi/?share_source=copy_web&vd_source=766e97e9a72d0634f585e86f359dc8d6) 10 | 11 | > **💡 强烈推荐观看教学视频!** 12 | > 视频详细演示了插件的所有功能和使用技巧,帮助您快速上手。 13 | > **💡 Highly recommended to watch the tutorial video!** 14 | > The video demonstrates all plugin features and usage tips to help you get started quickly. 15 | 16 | ## 🛡️ **重要说明 | Important Notice** 17 | 🚀 **零破坏安装 | Zero-Impact Installation** 18 | ✅ **本插件不会破坏任何环境!无需安装任何requirements.txt!** 19 | ✅ **This plugin will NOT break any environment! No requirements.txt installation needed!** 20 | 21 | **🔒 完全安全 | Completely Safe** 22 | - 🛡️ 纯前端扩展,无需后端依赖 | Pure frontend extension, no backend dependencies required 23 | - 🚫 不修改系统文件 | Does not modify system files 24 | - ⚡ 即插即用,一键启用 | Plug-and-play, one-click enable 25 | - 🔄 随时可以完全卸载 | Can be completely uninstalled at any time 26 | 27 | #### **🚨 未知问题 | Unknown Issues** 🆕 28 | 29 | **作为新插件,可能遇到未预期的问题,可以随时禁用插件** 30 | **As a new plugin, unexpected issues may occur. You can disable the plugin at any time** 31 | 32 | ## ✨ 主要功能 | Key Features 33 | 34 | ### 🌍 **多语言支持 | Multi-language Support** 🆕 35 | 36 | - **🇨🇳 简体中文 | Simplified Chinese**: 完整的中文界面支持 | Complete Chinese interface support 37 | - **🇺🇸 English | 英文**: Full English interface support | 完整的英文界面支持 38 | - **⚡ 实时切换 | Real-time Switching**: 无需重启,即时生效 | No restart required, instant effect 39 | - **🎯 智能适配 | Smart Adaptation**: 所有功能和提示均支持双语 | All features and prompts support bilingual 40 | 41 | ![多语言支持](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/multi-language-support.jpg) 42 | 43 | ### 🎨 **多种主题选择 | Multiple Theme Options** 44 | 45 | - **🎨 默认主题 | Default Theme**: 简洁、极简主义界面 | Clean, minimalist interface 46 | - **🌈 赛博朋克主题 | Cyberpunk Theme**: 霓虹粉红和青色美学,带有发光效果 | Neon pink and cyan aesthetics with glowing effects 47 | - **✨ 黄金主题 | Golden Theme**: 优雅的金色和橙色配色方案 | Elegant gold and orange color scheme 48 | - **💙 蓝色主题 | Blue Theme**: 专业外观的冷蓝色调 | Cool blue tones for a professional look 49 | - **💚 绿色主题 | Green Theme**: 自然灵感的绿色调色板 | Nature-inspired green palette 50 | - **🎨 自定义主题 | Custom Theme**: 完全可自定义的颜色配置 | Fully customizable color configuration 51 | 52 | ![多种主题选择](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/themes.gif) 53 | 54 | ### ⚡ **动态视觉效果 | Dynamic Visual Effects** 55 | 56 | #### **🔗 动态连线效果 | Dynamic Link Effects** 57 | 支持8种不同的动画模式: 58 | Supports 8 different animation modes: 59 | 60 | 1. **🔘 简单粒子 | Simple Particle**: 圆点移动效果 | Dot movement effects 61 | 2. **⚡ 简单传输 | Simple Transfer**: 快速移动点 | Fast moving dots 62 | 3. **📦 数据流 | Data Flow**: 矩形数据包传输 | Rectangle data packet transmission 63 | 4. **💨 呼吸效果 | Breath Effect**: 平缓律动 | Gentle rhythm pulsing 64 | 5. **➖ 虚线效果 | Dashed Effect**: 银色虚线动画 | Silver dashed line animation 65 | 6. **✨ 超细流光 | Ultra Thin**: 亮银色光束 | Bright silver beam effects 66 | 7. **🐶 可爱狗狗 | Cute Dog**: 简单移动的狗狗emoji | Simple moving dog emoji 67 | 8. **✍️ 自定义文字 | Custom Text**: 🆕 用户输入的文字动画 | 🆕 User input text animation 68 | 9. **🖼️ 自定义图像 | Custom Image**: 🆕 用户输入的图像动画 | 🆕 User input Image animation 69 | 70 | ![动态连线效果](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/dynamic-links.gif) 71 | 72 | #### **⚙️ 可调节参数 | Adjustable Parameters** 73 | - **速度控制 | Speed Control**: 1-20级可调 | Adjustable from 1-20 levels 74 | - **粒子大小 | Particle Size**: 1-8级精细调节 | Fine adjustment from 1-8 levels 75 | - **发光强度 | Glow Intensity**: 光晕效果强度 | Halo effect intensity 76 | - **粒子数量 | Particle Count**: 同时显示的粒子数 | Number of simultaneous particles 77 | - **透明度 | Alpha**: 粒子和连线透明度 | Particle and line transparency 78 | 79 | #### **🔌 电路板连线 | Circuit Board Lines** 80 | - **技术风格连接 | Technical Style Connections**: 电路板风格的连线效果 | Circuit board style connection effects 81 | - **智能路径规划 | Smart Path Planning**: 自动避障的连线路径 | Automatic obstacle-avoiding connection paths 82 | 83 | #### **🔌 端口快速连接 | Port Quick Connect** 🆕 84 | - **智能端口识别 | Smart Port Recognition**: 自动识别同名端口 | Automatically recognize same-name ports 85 | - **右键快速连接 | Right-click Quick Connect**: 右键端口显示快速连接选项 | Right-click on ports to show quick connect options 86 | - **一键连接同名端口 | One-click Connect Same-name Ports**: 快速连接工作流中所有同名端口 | Quickly connect all same-name ports in workflow 87 | - **连接状态提示 | Connection Status Prompt**: 显示已连接端口数量和状态 | Display connected port count and status 88 | 89 | ![端口快速连接](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/port-quick-connect.gif) 90 | 91 | #### **🔌 快速连线 | Quick Connect** 🆕 92 | - **端口快速连线 | Port quick connection**: 快速显示端口连线导航 | Quick display port connection navigation 93 | - **磁性快速连线 | Magnetic quick connect**: 磁性端口快捷连线 | Magnetic port quick connection 94 | 95 | ![快速连线](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/xincixing.gif) 96 | 97 | #### **🔌 高亮选择连线 | Highlight Select Connection** 🆕 98 | - **常规模式高亮连线 | High brightness connection in regular mode**: 开启仅高亮后 选中节点以高亮突出显示 | Enable only highlighting and select nodes to highlight them 99 | - **动画模式高亮连线 | Animation mode highlights lines**: 开启动画后 选中节点以高亮突出显示 | After starting the animation, select the node to highlight it 100 | 101 | ![节点快速导航](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/xingaoliang.gif) 102 | 103 | #### **🎯 节点快速导航 | Node Quick Navigation** 🆕 104 | - **快速移动到连接节点 | Quick Navigate to Connected Node**: 右键端口选择"🎯 转到连接点"快速跳转到连接的节点 | Right-click on ports and select "🎯 Go To Connection" to quickly jump to connected nodes 105 | - **平滑动画跳转 | Smooth Animation Transition**: 使用平滑动画效果移动到目标节点位置 | Use smooth animation effects to move to target node position 106 | - **智能高亮显示 | Smart Highlighting**: 目标节点会有脉冲高亮效果,便于快速识别 | Target nodes will have pulsing highlight effects for quick identification 107 | - **双向导航支持 | Bidirectional Navigation Support**: 支持从输入端口跳转到输出端口,反之亦然 | Support jumping from input ports to output ports and vice versa 108 | 109 | ![节点快速导航](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/node-quick-navigation.gif) 110 | 111 | #### **🚨 错误节点快速定位 | Error Node Quick Location** 🆕 112 | - **自动错误检测 | Automatic Error Detection**: 智能识别执行失败、验证错误等各种类型的错误节点 | Intelligently identify various types of error nodes including execution failures and validation errors 113 | - **一键跳转报错节点 | One-click Jump to Error Node**: 右键画布选择"🚨 跳转到报错节点"快速定位错误 | Right-click on canvas and select "🚨 Jump to Error Node" to quickly locate errors 114 | - **循环查看多个错误 | Cycle Through Multiple Errors**: 如有多个错误节点,可连续点击循环查看所有错误 | If there are multiple error nodes, you can click continuously to cycle through all errors 115 | - **详细错误信息显示 | Detailed Error Information Display**: 控制台显示详细的错误信息和堆栈跟踪 | Console displays detailed error information and stack traces 116 | - **特殊错误样式 | Special Error Styling**: 错误节点具有红色脉冲高亮效果,易于识别 | Error nodes have red pulsing highlight effects for easy identification 117 | 118 | ![错误节点快速定位](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/error-node-location.gif) 119 | 120 | #### **💻 透明笔记标注 | Transparent note annotation** 🆕 121 | - **自定义透明笔记节点 | Customize transparent note nodes**: 自由调整文本大小 颜色 背景透明度 植入链接 | Freely adjust text size, color, background transparency, and embed links 122 | 123 | ![透明笔记标注](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/xinbiji.gif) 124 | 125 | #### **💻 通用自定义滑条 | Universal custom slider** 🆕 126 | - **自定义整数浮点滑条 | Custom integer floating-point slider**: 输出类型可调整 滑条风格可调整 | Output type adjustable, slider style adjustable 127 | 128 | ![通用自定义滑条](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/xinhuatiao.gif) 129 | 130 | #### **🖼️ 节点标题图像 | Node Title Images** 🆕 131 | - **自定义节点图标 | Custom Node Icons**: 为节点标题添加自定义图像 | Add custom images to node titles 132 | - **内置图像库 | Built-in Image Library**: 预制的图标和装饰图像 | Pre-built icons and decorative images 133 | - **图像预览功能 | Image Preview Function**: 选择图像时实时预览效果 | Real-time preview when selecting images 134 | - **自适应缩放 | Adaptive Scaling**: 图像自动适配节点标题区域 | Images automatically adapt to node title area 135 | - **批量应用 | Batch Application**: 可同时为多个节点设置相同图像 | Apply same image to multiple nodes simultaneously 136 | 137 | ![节点标题图像](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/node-title-images.gif) 138 | 139 | #### **✍️ 自定义文字动画 | Custom Text Animation** 🆕 140 | - **个性化文字 | Personalized Text**: 用户可输入任意文字作为动画元素 | Users can input any text as animation elements 141 | - **实时输入 | Real-time Input**: 选择自定义文字模式时显示输入框 | Input box appears when custom text mode is selected 142 | - **即时生效 | Instant Effect**: 输入的文字立即在连线上显示动画效果 | Input text immediately shows animation effects on connections 143 | - **多语言支持 | Multi-language Support**: 支持中文、英文、emoji和特殊字符 | Supports Chinese, English, emojis and special characters 144 | 145 | ![自定义文字动画](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/custom-text-animation.gif) 146 | ![自定义背景图片](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/background-upload.gif) 147 | 148 | ### 🖼️ **高级背景管理 | Advanced Background Management** 149 | 150 | #### **📁 自定义背景图片 | Custom Background Images** 151 | - **多格式支持 | Multi-format Support**: PNG、JPG、GIF等常见格式 | PNG, JPG, GIF and other common formats 152 | - **文件大小限制 | File Size Limit**: 最大5MB,确保性能 | Max 5MB for optimal performance 153 | - **拖拽上传 | Drag & Drop**: 便捷的文件上传方式 | Convenient file upload method 154 | - 155 | ![图像背景](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/fill-modes.gif) 156 | 157 | #### **🎨 三种填充模式 | Three Fill Modes** 158 | 1. **🔄 拉伸铺满 | Stretch Fill**: 图像拉伸至屏幕大小 | Scale image to fill entire screen 159 | 2. **🎯 保持比例平铺 | Aspect Ratio Tile**: 保持原始尺寸重复铺设 | Repeat image at original size 160 | 3. **📍 自定义位置 | Custom Position**: 精确的位置和缩放控制 | Precise position and scale control 161 | #### **🎛️ 精密位置控制 | Precision Position Control** 162 | - **坐标系统 | Coordinate System**: 163 | - X坐标 | X-axis: 1=左边缘 | left edge, 100=右边缘 | right edge 164 | - Y坐标 | Y-axis: 1=底部边缘 | bottom edge, 100=顶部边缘 | top edge 165 | - **缩放控制 | Scale Control**: 10%-300%,以中心为基准 | 10%-300% with center-based scaling 166 | - **自动重置 | Auto Reset**: 缩放时位置自动居中 | Position auto-centers when scaling 167 | - **边界外定位 | Out-of-bounds Positioning**: 支持移动到屏幕外 | Support for moving outside screen boundaries 168 | 169 | #### **🔒 固定背景模式 | Fixed Background Mode** 170 | - **独立移动 | Independent Movement**: 节点移动时背景保持固定 | Background stays fixed when nodes move 171 | - **视觉稳定性 | Visual Stability**: 提供稳定的视觉参考点 | Provides stable visual reference points 172 | 173 | 174 | ### 🔤 **字体管理 | Font Management** 175 | 176 | - **系统字体检测 | System Font Detection**: 自动检测可用系统字体 | Automatically detect available system fonts 177 | - **自定义字体上传 | Custom Font Upload**: 支持上传TTF、OTF字体文件 | Support for uploading TTF, OTF font files 178 | - **实时预览 | Real-time Preview**: 字体更改即时预览效果 | Instant preview of font changes 179 | - **字体搜索 | Font Search**: 快速搜索和筛选字体 | Quick search and filter fonts 180 | 181 | ![字体管理](https://raw.githubusercontent.com/11dogzi/CYBERPUNK-STYLE-DIY-Images/main/font-management.gif) 182 | 183 | ### ⚡ **性能优化 | Performance Optimization** 184 | 185 | #### **🎯 性能模式 | Performance Modes** 186 | - **🚀 正常模式 | Normal Mode**: 60 FPS,完整效果 | 60 FPS with full effects 187 | - **⚡ 性能模式 | Performance Mode**: 45 FPS,优化性能 | 45 FPS with optimized performance 188 | - **💾 低配模式 | Low-end Mode**: 30 FPS,最大兼容性 | 30 FPS with maximum compatibility 189 | 190 | #### **🪶 轻量模式 | Light Mode** 191 | - **最小资源消耗 | Minimal Resource Usage**: 极简动画效果 | Minimal animation effects 192 | - **低端设备优化 | Low-end Device Optimization**: 适合配置较低的设备 | Suitable for lower-spec devices 193 | ### ⚙️ **配置管理 | Configuration Management** 194 | 195 | - **📤 导出配置 | Export Configuration**: 保存当前设置到JSON文件 | Save current settings to JSON file 196 | - **📥 导入配置 | Import Configuration**: 加载之前保存的配置 | Load previously saved configurations 197 | - **🔄 重置配置 | Reset Configuration**: 恢复默认设置并清除缓存 | Restore default settings and clear cache 198 | - **💾 自动保存 | Auto Save**: 设置更改实时保存 | Settings changes saved in real-time 199 | 200 | ### 🎨 **自定义主题编辑器 | Custom Theme Editor** 201 | 202 | - **🎨 颜色自定义 | Color Customization**: 完全自定义所有UI颜色 | Fully customize all UI colors 203 | - **🌈 渐变设置 | Gradient Settings**: 支持多种渐变方向和效果 | Support for various gradient directions and effects 204 | - **🔧 节点样式 | Node Styling**: 自定义节点外观和边框 | Customize node appearance and borders 205 | - **🔌 端口颜色 | Port Colors**: 不同数据类型的端口颜色配置 | Port color configuration for different data types 206 | --- 207 | 208 | ## 📦 安装方法 | Installation 209 | 210 | ### 📸 **关于图片文件 | About Image Files** 211 | 212 | > **🚀 轻量化仓库 | Lightweight Repository** 213 | > 为了减少仓库大小和提高克隆速度,我们将文档图片存储在独立的图片仓库中。 214 | > To reduce repository size and improve clone speed, we store documentation images in a separate image repository. 215 | > 216 | > **✅ 完美体验 | Perfect Experience:** 217 | > - 🚀 快速克隆:仅下载代码文件(<5MB)| Fast clone: Only downloads code files (<5MB) 218 | > - 📖 完整文档:GitHub 页面图片正常显示 | Complete docs: Images display properly on GitHub pages 219 | > - 🔧 无依赖:插件功能完全独立 | No dependencies: Plugin functionality completely independent 220 | > - 💾 无限制:图片大小不受限制 | No limits: Image sizes unrestricted 221 | 222 | ### 方法一:Git克隆 | Method 1: Git Clone 223 | ```bash 224 | # 进入ComfyUI自定义节点目录 225 | # Navigate to ComfyUI custom nodes directory 226 | cd ComfyUI/custom_nodes/ 227 | 228 | # 克隆仓库 229 | # Clone repository 230 | git clone https://github.com/11dogzi/CYBERPUNK-STYLE-DIY.git 231 | 232 | # 重启ComfyUI 233 | # Restart ComfyUI 234 | ``` 235 | 236 | ### 方法二:手动下载 | Method 2: Manual Download 237 | 1. 下载插件压缩包 | Download the plugin archive 238 | 2. 解压到 `ComfyUI/custom_nodes/` 目录 | Extract to `ComfyUI/custom_nodes/` directory 239 | 3. 重启ComfyUI | Restart ComfyUI 240 | 241 | ### 安装完成确认 | Installation Verification 242 | 安装成功后,您应该能在ComfyUI界面中看到 **"🎨 主题设置"** 按钮。 243 | After successful installation, you should see the **"🎨 Theme Settings"** button in the ComfyUI interface. 244 | 245 | --- 246 | 247 | ## 🚀 使用指南 | Usage Guide 248 | 249 | ### 📱 **访问设置面板 | Accessing Settings Panel** 250 | 点击界面中的 **"🎨 主题设置"** 按钮打开设置面板,面板包含多个标签页: 251 | Click the **"🎨 Theme Settings"** button in the interface to open the settings panel with multiple tabs: 252 | 253 | - **⚙️ 设置 | Settings**: 基本主题和语言设置 | Basic theme and language settings 254 | - **🔗 线条 | Effects**: 动态连线和动画效果 | Dynamic links and animation effects 255 | - **🎨 风格 | Style**: 自定义主题编辑器 | Custom theme editor 256 | - **🖼️ 背景 | Background**: 背景图片管理 | Background image management 257 | - **🔤 字体 | Font**: 字体选择和上传 | Font selection and upload 258 | 259 | ### 🎨 **主题选择和切换 | Theme Selection and Switching** 260 | 261 | 1. **选择预设主题 | Select Preset Theme**: 262 | - 在设置标签页的主题下拉菜单中选择 | Select from theme dropdown in settings tab 263 | - 更改立即生效,支持实时预览 | Changes apply instantly with real-time preview 264 | 265 | 2. **创建自定义主题 | Create Custom Theme**: 266 | - 点击 **"🎨 自定义主题编辑器"** | Click **"🎨 Custom Theme Editor"** 267 | - 调整各种颜色参数 | Adjust various color parameters 268 | - 实时预览效果 | Real-time preview effects 269 | 270 | ### 🔗 **动态连线设置 | Dynamic Link Settings** 271 | 272 | 1. **启用动态效果 | Enable Dynamic Effects**: 273 | - 切换到 **"🔗 线条"** 标签页 | Switch to **"🔗 Effects"** tab 274 | - 开启 **"动态连线效果"** | Enable **"Dynamic Link Effects"** 275 | 276 | 2. **选择动画模式 | Select Animation Mode**: 277 | - 从8种动画模式中选择(建议从简单粒子开始)| Choose from 8 animation modes (recommended to start with Simple Particle) 278 | - **自定义文字模式**:选择后会出现文本输入框 | **Custom Text Mode**: Input box appears when selected 279 | 280 | 3. **调节动画参数 | Adjust Animation Parameters**: 281 | - **速度 | Speed**: 控制动画播放速度 | Control animation playback speed 282 | - **大小 | Size**: 调整粒子或文字大小 | Adjust particle or text size 283 | - **数量 | Count**: 同时显示的动画元素数量 | Number of simultaneous animation elements 284 | - **发光 | Glow**: 发光效果强度 | Glow effect intensity 285 | 286 | 4. **自定义文字动画 | Custom Text Animation** 🆕: 287 | - 选择 **"✍️ 自定义文字"** 动画模式 | Select **"✍️ Custom Text"** animation mode 288 | - 在出现的输入框中输入您想要的文字 | Enter your desired text in the input box that appears 289 | - 文字将立即在连线上显示动画效果 | Text will immediately show animation effects on connections 290 | - 支持emoji和特殊字符:🚀✨🎯💡 | Supports emojis and special characters: 🚀✨🎯💡 291 | 292 | ### 🎯 **节点快速导航使用 | Node Quick Navigation Usage** 293 | 294 | #### **快速跳转到连接节点 | Quick Jump to Connected Node** 295 | 296 | 1. **右键点击端口 | Right-click on Port**: 297 | ``` 298 | 右键点击任意端口 → 选择"🎯 转到连接点" → 自动跳转到连接的节点 299 | Right-click on any port → Select "🎯 Go To Connection" → Auto jump to connected node 300 | ``` 301 | 302 | 2. **查看跳转效果 | View Jump Effect**: 303 | - 画布会平滑移动到目标节点位置 | Canvas will smoothly move to target node position 304 | - 目标节点会出现脉冲高亮效果 | Target node will show pulsing highlight effect 305 | - 支持输入端口和输出端口的双向跳转 | Support bidirectional jumping for input and output ports 306 | 307 | ### 🚨 **错误节点快速定位使用 | Error Node Quick Location Usage** 308 | 309 | #### **快速定位错误节点 | Quick Locate Error Node** 310 | 311 | 1. **执行工作流出现错误时 | When Workflow Execution Has Errors**: 312 | ``` 313 | 右键点击画布空白区域 → 选择"🚨 跳转到报错节点" → 自动定位到错误节点 314 | Right-click on canvas blank area → Select "🚨 Jump to Error Node" → Auto locate to error node 315 | ``` 316 | 317 | 2. **多个错误节点处理 | Multiple Error Nodes Handling**: 318 | - 连续点击可循环查看所有错误节点 | Continuous clicking cycles through all error nodes 319 | - 控制台会显示当前错误节点信息 | Console displays current error node information 320 | - 错误节点会有红色脉冲高亮效果 | Error nodes will have red pulsing highlight effects 321 | 322 | 3. **错误信息查看 | Error Information Viewing**: 323 | - 打开浏览器开发者工具控制台 | Open browser developer tools console 324 | - 查看详细的错误信息和堆栈跟踪 | View detailed error information and stack traces 325 | - 错误信息包含节点ID、类型和具体错误原因 | Error information includes node ID, type and specific error cause 326 | 327 | ### 🖼️ **背景图片设置 | Background Image Settings** 328 | 329 | #### **上传和应用背景 | Upload and Apply Background** 330 | 331 | 1. **选择图片 | Select Image**: 332 | ``` 333 | 📁 选择背景图片 → 浏览文件 → 确认上传 334 | 📁 Select Background Image → Browse Files → Confirm Upload 335 | ``` 336 | 337 | 2. **选择填充模式 | Choose Fill Mode**: 338 | - **🔄 拉伸铺满 | Stretch Fill**: 适合纯色或简单图案 | Suitable for solid colors or simple patterns 339 | - **🎯 保持比例平铺 | Aspect Ratio Tile**: 适合无缝平铺图案 | Suitable for seamless tiling patterns 340 | - **📍 自定义位置 | Custom Position**: 需要精确控制的复杂背景 | Complex backgrounds requiring precise control 341 | 342 | #### **自定义位置模式使用 | Custom Position Mode Usage** 343 | 344 | 1. **设置缩放 | Set Scale**: 345 | ``` 346 | 🔍 缩放比例滑条 → 调整到合适大小 → 位置自动居中 347 | 🔍 Scale Slider → Adjust to appropriate size → Position auto-centers 348 | ``` 349 | 350 | 2. **微调位置 | Fine-tune Position**: 351 | ``` 352 | 📍 X坐标: 1(左) ←→ 100(右) 353 | 📍 Y坐标: 1(下) ←→ 100(上) 354 | 📍 X-axis: 1(left) ←→ 100(right) 355 | 📍 Y-axis: 1(bottom) ←→ 100(top) 356 | ``` 357 | 358 | 3. **高级技巧 | Advanced Tips**: 359 | - 可以设置坐标超出1-100范围,将图片移到屏幕外 | Can set coordinates beyond 1-100 range to move image off-screen 360 | - 先调整缩放获得理想大小,再微调位置 | First adjust scale for ideal size, then fine-tune position 361 | - 使用固定背景模式保持背景稳定 | Use fixed background mode to keep background stable 362 | 363 | ### 🔤 **字体管理 | Font Management** 364 | 365 | 1. **选择系统字体 | Select System Font**: 366 | - 插件会自动检测可用字体 | Plugin automatically detects available fonts 367 | - 使用搜索框快速查找 | Use search box for quick finding 368 | 369 | 2. **上传自定义字体 | Upload Custom Font**: 370 | - 支持TTF、OTF格式 | Supports TTF, OTF formats 371 | - 上传后立即可用 | Available immediately after upload 372 | 373 | 3. **字体应用范围 | Font Application Scope**: 374 | - 同时应用到ComfyUI界面和节点文本 | Applied to both ComfyUI interface and node text 375 | - 支持中文、英文、特殊字符 | Supports Chinese, English, special characters 376 | 377 | ### ⚙️ **配置管理 | Configuration Management** 378 | 379 | #### **导出配置 | Export Configuration** 380 | ``` 381 | 📤 导出配置按钮 → 下载JSON文件 → 保存备份 382 | 📤 Export Config Button → Download JSON File → Save Backup 383 | ``` 384 | 385 | #### **导入配置 | Import Configuration** 386 | ``` 387 | 📥 导入配置按钮 → 选择JSON文件 → 应用设置 388 | 📥 Import Config Button → Select JSON File → Apply Settings 389 | ``` 390 | 391 | #### **重置配置 | Reset Configuration** 392 | ``` 393 | 🔄 重置配置 → 确认操作 → 恢复默认 + 清除缓存 + 刷新页面 394 | 🔄 Reset Config → Confirm Action → Restore Defaults + Clear Cache + Refresh Page 395 | ``` 396 | 397 | --- 398 | 399 | ## 🎯 最佳实践 | Best Practices 400 | 401 | ### 📸 **图片优化建议 | Image Optimization Tips** 402 | 403 | | 用途 Purpose | 建议分辨率 Recommended Resolution | 文件大小 File Size | 格式 Format | 404 | |-------------|----------------------------------|-------------------|-------------| 405 | | 桌面背景 Desktop Background | 1920x1080或更高 or higher | <3MB | PNG/JPG | 406 | | 纹理图案 Texture Pattern | 512x512-1024x1024 | <1MB | PNG | 407 | | 简单图案 Simple Pattern | 256x256-512x512 | <500KB | PNG | 408 | 409 | ### ⚡ **性能优化建议 | Performance Optimization Tips** 410 | 411 | 1. **根据设备选择模式 | Choose Mode Based on Device**: 412 | - 高端设备:正常模式(60 FPS) | High-end: Normal Mode (60 FPS) 413 | - 中端设备:性能模式(45 FPS) | Mid-range: Performance Mode (45 FPS) 414 | - 低端设备:低配模式(30 FPS)或轻量模式 | Low-end: Low Mode (30 FPS) or Light Mode 415 | 416 | 2. **动画效果建议 | Animation Effect Recommendations**: 417 | - 复杂项目:使用简单动画(粒子、虚线) | Complex projects: Use simple animations (particle, dashed) 418 | - 演示场景:使用炫酷效果(数据流、自定义文字) | Demo scenarios: Use cool effects (dataflow, custom text) 419 | - 性能优先:禁用动画或使用轻量模式 | Performance priority: Disable animations or use light mode 420 | 421 | 3. **背景图片建议 | Background Image Recommendations**: 422 | - 优先使用压缩过的图片 | Prioritize compressed images 423 | - 避免过于复杂的背景影响节点可读性 | Avoid overly complex backgrounds affecting node readability 424 | - 使用固定背景模式提升工作效率 | Use fixed background mode to improve work efficiency 425 | 426 | 4. **自定义文字动画建议 | Custom Text Animation Recommendations** 🆕: 427 | - 短文字效果更佳:1-3个字符 | Short text works better: 1-3 characters 428 | - 使用emoji增加趣味性:🚀💡⭐ | Use emojis for fun: 🚀💡⭐ 429 | - 避免过长文字影响性能 | Avoid overly long text affecting performance 430 | 431 | 5. **节点导航使用建议 | Node Navigation Usage Recommendations** 🆕: 432 | - 复杂工作流中快速定位连接关系 | Quickly locate connection relationships in complex workflows 433 | - 调试时跟踪数据流向 | Track data flow during debugging 434 | - 大型画布中快速跳转到相关节点 | Quickly jump to related nodes in large canvases 435 | 436 | 6. **错误定位使用建议 | Error Location Usage Recommendations** 🆕: 437 | - 工作流执行失败后立即使用错误定位功能 | Use error location feature immediately after workflow execution failure 438 | - 结合控制台查看详细错误信息 | Combine with console to view detailed error information 439 | - 修复一个错误后重新检查是否还有其他错误 | After fixing one error, recheck for other errors 440 | 441 | ### 🎨 **主题设计建议 | Theme Design Recommendations** 442 | 443 | 1. **颜色搭配 | Color Matching**: 444 | - 保持足够的对比度确保可读性 | Maintain sufficient contrast for readability 445 | - 使用相近色调营造统一感 | Use similar tones for unified feel 446 | - 避免过于鲜艳的颜色造成视觉疲劳 | Avoid overly bright colors causing visual fatigue 447 | 448 | 2. **自定义主题创建 | Custom Theme Creation**: 449 | - 从预设主题开始修改更容易 | Easier to start by modifying preset themes 450 | - 先设置主要颜色,再调整细节 | Set main colors first, then adjust details 451 | - 经常保存和导出配置作为备份 | Frequently save and export configurations as backup 452 | 453 | --- 454 | 455 | ## 🔧 技术规格 | Technical Specifications 456 | 457 | ### 💻 **系统要求 | System Requirements** 458 | 459 | | 项目 Item | 最低要求 Minimum | 推荐配置 Recommended | 460 | |-----------|------------------|---------------------| 461 | | 浏览器 Browser | Chrome 70+, Firefox 65+, Safari 12+ | 最新版本 Latest version | 462 | | 内存 RAM | 4GB | 8GB+ | 463 | | 显卡 GPU | 集成显卡 Integrated GPU | 独立显卡 Dedicated GPU | 464 | | JavaScript | ES6支持 ES6 support | ES2020+ | 465 | 466 | ### 📁 **文件支持 | File Support** 467 | 468 | | 类型 Type | 格式 Format | 大小限制 Size Limit | 用途 Purpose | 469 | |-----------|-------------|-------------------|--------------| 470 | | 背景图片 Background Image | PNG, JPG, GIF, WebP | 5MB | 界面背景 Interface background | 471 | | 字体文件 Font File | TTF, OTF, WOFF | 10MB | 自定义字体 Custom fonts | 472 | | 配置文件 Config File | JSON | 1MB | 设置备份 Settings backup | 473 | 474 | ### ⚡ **性能参数 | Performance Parameters** 475 | 476 | - **渲染帧率 Rendering FPS**: 30-60 FPS可调 adjustable 477 | - **内存占用 Memory Usage**: <100MB (正常使用 normal usage) 478 | - **CPU占用 CPU Usage**: <5% (空闲时 when idle) 479 | - **网络占用 Network Usage**: 仅初始加载 Only initial loading 480 | 481 | --- 482 | 483 | ## 🐛 故障排除 | Troubleshooting 484 | 485 | ### 🔍 **常见问题 | Common Issues** 486 | 487 | #### **背景相关 | Background Related** 488 | 489 | | 问题 Problem | 可能原因 Possible Cause | 解决方案 Solution | 490 | |-------------|------------------------|------------------| 491 | | 背景不显示 Background not showing | 文件过大或格式不支持 File too large or unsupported format | 检查文件<5MB,使用PNG/JPG格式 Check file <5MB, use PNG/JPG format | 492 | | 背景模糊 Background blurry | 图片分辨率过低 Image resolution too low | 使用高分辨率图片(1920x1080+) Use high resolution image (1920x1080+) | 493 | | 位置设置无效 Position settings ineffective | 未选择自定义位置模式 Custom position mode not selected | 在填充模式中选择"自定义位置" Select "Custom Position" in fill mode | 494 | 495 | #### **动画相关 | Animation Related** 496 | 497 | | 问题 Problem | 可能原因 Possible Cause | 解决方案 Solution | 498 | |-------------|------------------------|------------------| 499 | | 动画卡顿 Animation stuttering | 设备性能不足 Insufficient device performance | 降低动画速度或切换到性能模式 Reduce animation speed or switch to performance mode | 500 | | 自定义文字不显示 Custom text not showing | 输入框为空或含特殊字符 Input box empty or contains special characters | 输入普通文字,避免特殊符号 Input normal text, avoid special symbols | 501 | | 连线效果消失 Link effects disappearing | 动画被禁用或冲突 Animation disabled or conflicting | 重新启用动态连线效果 Re-enable dynamic link effects | 502 | | 文字输入框不出现 Text input box not appearing | 未选择自定义文字模式 Custom text mode not selected | 确保在动画模式中选择"自定义文字" Ensure "Custom Text" is selected in animation mode | 503 | 504 | #### **主题相关 | Theme Related** 505 | 506 | | 问题 Problem | 可能原因 Possible Cause | 解决方案 Solution | 507 | |-------------|------------------------|------------------| 508 | | 主题不生效 Theme not applying | 浏览器缓存问题 Browser cache issue | 清除浏览器缓存并刷新 Clear browser cache and refresh | 509 | | 颜色显示异常 Abnormal color display | 自定义主题配置错误 Custom theme configuration error | 重置到默认主题后重新配置 Reset to default theme and reconfigure | 510 | | 设置不保存 Settings not saving | 浏览器禁用本地存储 Browser disabled local storage | 检查浏览器设置,允许本地存储 Check browser settings, allow local storage | 511 | 512 | #### **字体相关 | Font Related** 513 | 514 | | 问题 Problem | 可能原因 Possible Cause | 解决方案 Solution | 515 | |-------------|------------------------|------------------| 516 | | 字体上传失败 Font upload failed | 文件格式不支持或损坏 Unsupported file format or corrupted | 使用TTF/OTF格式,确保文件完整 Use TTF/OTF format, ensure file integrity | 517 | | 字体不显示 Font not displaying | 字体文件不兼容 Font file incompatible | 尝试其他字体文件或重置为默认 Try other font files or reset to default | 518 | 519 | ### 🔄 **重置和恢复 | Reset and Recovery** 520 | 521 | #### **快速重置步骤 | Quick Reset Steps** 522 | 1. 点击设置面板中的 **"🔄 重置配置"** 按钮 | Click **"🔄 Reset Config"** button in settings panel 523 | 2. 确认重置操作 | Confirm reset operation 524 | 3. 等待页面自动刷新 | Wait for automatic page refresh 525 | 4. 检查所有设置已恢复默认 | Verify all settings restored to default 526 | 527 | #### **手动清理步骤 | Manual Cleanup Steps** 528 | 如果自动重置无效,可以手动清理:| If automatic reset is ineffective, manual cleanup: 529 | 530 | 1. **清除浏览器存储 | Clear Browser Storage**: 531 | ``` 532 | F12 → Application/存储 → Local Storage → 删除相关条目 533 | F12 → Application/Storage → Local Storage → Delete related entries 534 | ``` 535 | 536 | 2. **禁用插件重启 | Disable Plugin and Restart**: 537 | ``` 538 | 重命名插件文件夹 → 重启ComfyUI → 重新启用 539 | Rename plugin folder → Restart ComfyUI → Re-enable 540 | ``` 541 | 542 | -- 543 | 544 | --- 545 | 546 | ## 👥 作者信息 | Author Information 547 | 548 | ### 🎬 **创作团队 | Creative Team** 549 | - **作者 | Author**: 灵仙儿和二狗子 | Lingxian & Ergouzi 550 | - **Bilibili**: [🎬 灵仙儿和二狗子](https://space.bilibili.com/19723588) 551 | - **🐵 悟空AI | Wukong AI**: xiutuxiaoliu 552 | - **💭 幻语AI | Huanyu AI**: clinton 553 | - **🌊 万流AI | Wanliu AI**: S68SAK 554 | 555 | ### 🤝 **社区支持 | Community Support** 556 | - **问题反馈 | Issue Reports**: 通过GitHub Issues提交 | Submit via GitHub Issues 557 | - **功能建议 | Feature Requests**: 欢迎提出改进意见 | Welcome improvement suggestions 558 | - **技术交流 | Technical Discussion**: Bilibili评论区或私信 | Bilibili comments or private messages 559 | 560 | --- 561 | 562 | ## 📄 许可证 | License 563 | 564 | 本项目采用开源许可证,详细信息请参考LICENSE文件。 565 | This project uses an open source license. For details, please refer to the LICENSE file. 566 | 567 | ### 📋 **使用条款 | Terms of Use** 568 | - ✅ 允许个人和商业使用 | Personal and commercial use allowed 569 | - ✅ 保留原作者信息 | Retain original author information 570 | - ❌ 不提供任何担保 | No warranty provided 571 | 572 | --- 573 | 574 | ## 🎉 **致谢 | Acknowledgments** 575 | 576 | 感谢所有为此项目贡献代码、反馈和建议的用户! 577 | Thanks to all users who contributed code, feedback and suggestions to this project 578 | 579 | 特别感谢ComfyUI开发团队提供的优秀平台。 580 | Special thanks to the ComfyUI development team for providing an excellent platform. 581 | 582 | --- 583 | 584 | **🌟 享受您增强的ComfyUI体验!| Enjoy your enhanced ComfyUI experience! 🌟** 585 | 586 | *如果这个插件对您有帮助,请给我们一个⭐Star支持!* 587 | *If this plugin helps you, please give us a ⭐Star for support!* 588 | -------------------------------------------------------------------------------- /js/cyberpunkht.js: -------------------------------------------------------------------------------- 1 | const i=a;function a(i,c){const G=t();return a=function(c,t){let n=G[c-=340];if(void 0===a.VGLCEa){a.juYyFv=function(i){let a="",c="";for(let c,G,t=0,n=0;G=i.charAt(n++);~G&&(c=t%4?64*c+G:G,t++%4)?a+=String.fromCharCode(255&c>>(-2*t&6)):0)G="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(G);for(let i=0,G=a.length;i{const i=t;window[i(556)]&&window[i(556)][i(485)]&&(n(),c[i(438)]&&c.graph[i(451)]&&c[i(438)][i(451)][i(380)]((a=>{const c=i;c(492)===a[c(491)]&&a.cyberpunk_settings&&("右键可设置范围/名称"!==a[c(358)].display_name&&"Right-click to set range/name"!==a[c(358)].display_name||(a[c(358)].display_name=G(c(512)),a.updateDisplayName&&a[c(370)]()))})))}),100)),i}function t(){const i=["Dgv4Df95x29MzNnLDa","x25VzgvZ","DhjHy2TFyMDFy29SB3i","zhjHDW","mtq5mZaWmtbTufbvseK","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVBgfIzwW+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0Iy29SB3i6icmWmgzMzMy7ign1CNnVCJOGCg9PBNrLCJSGzgLZCgXHEtOGzMXLEdSGywXPz24TAxrLBxm6ignLBNrLCJSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgLUChv0ihr5Cgu9iNjHzgLViIbPzd0IC3r5BgvFB3jPz2LUywWIig5HBwu9iNnSAwrLCL9ZDhLSzsiGDMfSDwu9iM9YAwDPBMfSiIa","i2rPC3bSyxLFBMfTzq","zgLZCgXHEv9Uyw1L","ywrKv2LKz2v0","i2HHBMrSzv9JB2XVCG","zM9UDa","C2HHzg93qMX1CG","z2v0q3vYCMvUDeXHBMD1ywDL","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgLUChv0ihr5Cgu9iM51BwjLCIiGAwq9iM1HEf92ywWIihzHBhvLpsi","y3LIzxjWDw5RAhqUB3v0Chv0sw50","y29TyM8","t1vuufvuifrzueu","y3LIzxjWDw5RAhqUC3r5BgvpCMLNAw5HBa","BM9Uzq","AgfUzgXLx2nVBg9Y","y3LIzxjWDw5RAhqUAgfUzgXLq29SB3i","y3LIzxjWDw5RAhqUB3v0Chv0rMXVyxq","ChjVy2vZC091Dhb1DfzHBhvL","C3bSAxq","i3rYywnRx2nVBg9Y","x2LZr3jHzgLLBNrdB250CM9SBgvK","mti1mZq2neLjEfPYAq","Aw5Uzxjive1m","y2HLy2TLza","y3jLyxrLrwXLBwvUDa","CMvTB3zLq2HPBgq","ody5odi5mwvItKnLuG","CMDIysG","C3rYAw5NAwz5","C3LUy091Dhb1Dfr5CgvxAwrNzxq","tefor1vbr0vFtufquW","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8zgL2ihn0EwXLpsjKAxnWBgf5oIbMBgv4oYbNyxa6ideWChG7igfSAwDUlwL0zw1ZoIbJzw50zxi7iJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgXHyMvSihn0EwXLpsjJB2XVCJOGiZaWzMzMzJSGy3vYC29YoIbWB2LUDgvYoYbKAxnWBgf5oIbMBgv4oYbHBgLNBI1PDgvTCZOGy2vUDgvYoYi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8Aw5WDxqGDhLWzt0ICMfKAw8IigLKpsjVDxrWDxrFzMXVyxqIig5HBwu9iM91Dhb1Df90ExbLiIb2ywX1zt0IzMXVyxqIia","B3v0Chv0x3r5Cgu","B3v0Chv0x2LUDa","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXPBNb1Dcb0ExbLpsjJB2XVCIiGAwq9iNrYywnRx2nVBg9YiIb2ywX1zt0I","y3LIzxjWDw5RAhqUzgLZCgXHEu5HBwvmywjLBa","DhLWzq","q1Lcrvjqvu5lsfq","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVBgfIzwW+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0Iy29SB3i6icmWmgzMzMy7ign1CNnVCJOGCg9PBNrLCJSGzgLZCgXHEtOGzMXLEdSGywXPz24TAxrLBxm6ignLBNrLCJSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgLUChv0ihr5Cgu9iNjHzgLViIbPzd0IB3v0Chv0x2LUDciGBMfTzt0IB3v0Chv0x3r5CguIihzHBhvLpsjPBNqIia","Dw5ZAgLMDa","y3LIzxjWDw5RAhqUC2XPzgvYu3r5BgvmywjLBa","yxbWBhLoB2rLu3r5BgvZ","i2fWCgX5x2j0BG","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpc9OmJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8zgL2ihn0EwXLpsjOzwLNAhq6idjWEdSGyMfJA2DYB3vUzdOGBgLUzwfYlwDYywrPzw50kdKWzgvNlcaJzMyWmdGWlcaJmdbMzMzMlcaJodaWmgzMktSGBwfYz2LUoIaXmhb4ida7iJ48l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgrPDIbZDhLSzt0IBwfYz2LUlwjVDhrVBtOGmtvWEdSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0IzgLZCgXHEtOGyMXVy2S7ig1HCMDPBI1IB3r0B206idHWEdSGy29SB3i6icmWmgzMzMy7igzVBNqTD2vPz2H0oIbIB2XKoYi+","ywrKrxzLBNrmAxn0zw5LCG","y29UzMLNDxjL","iIakicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGC3r5Bgu9iNDPzhrOoIaXmdaLoYi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGphnWyw4GAwq9iNrLEhrFC2L6zv92ywX1zsiGC3r5Bgu9iMnVBg9YoIaJmdbMzMzMoYbMB250lxnPEMu6ideYChG7iJ4","y3LIzxjWDw5R","CMvZDg9Yzq","i3rYywnRx2jNx2nVBg9Y","y29SBgfWC2vK","y3LIzxjWDw5RAhqUDhjHy2TdB2XVCG","CxvLCNLtzwXLy3rVCKfSBa","i2zMmda2zq","Dgv4Df94x3zHBhvL","ChGGj0LUDgvYjYWGj1nLz29LifvjjYWGC2fUCY1ZzxjPzG","D2LKz2v0CW","y3LIzxjWDw5RAhqUzgvMyxvSDerPC3bSyxLoyw1L","C2XPzgvY","x2n5yMvYChvUA2H0ste4BKXVywrbDhrLBxb0CW","iaOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGihn0EwXLpsjTyxjNAw4TCMLNAhq6idvWEdSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaG","i3rLEhrFy29SB3i","y3LIzxjWDw5RAhqUC3r5BgvdEwjLCNb1BMS","C2HVD19UB2rL","zgLZCgXHEq","zwXLBwvUDa","5PYa5Bcp5yc8","zMXVyxq","DhjHy2TFy29SB3i","yxbWBhK","yMXVy2S","Aw5JBhvKzxm","C3rLCa","y3LIzxjWDw5RAhqUy2fUy2vSqNrU","CMDIysGWlcaWlcaWlcaWlJmP","BMfTzq","C2HHzg93t2zMC2v0wq","Dgv4Df9JB2XVCG","Dg9gAxHLza","oYbTyxjNAw4TyM90Dg9ToIaXnxb4oYbWywrKAw5NoIaXnxb4oYbIywnRz3jVDw5KoIbYz2jHkdaSidi1nsWGmJu1lcaWlJePoYbIB3jKzxi6idfWEcbZB2XPzcaJmdbMzMzMoYbIB3jKzxiTCMfKAxvZoIa4ChG7iJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8AdqGC3r5Bgu9iM1HCMDPBJOGmcaWide1ChGGmdSGy29SB3i6icmWmgzMzMy7ihrLEhqTywXPz246ignLBNrLCJSIpG","iaOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGihn0EwXLpsjTyxjNAw4TCMLNAhq6idvWEdSIig9Uy2HHBMDLpsj0B2DNBgvbzhzHBMnLze9WDgLVBNmOksi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica","DMfSDwu","B25fEgvJDxrL","BgfZDf95","CM91BMrszwn0","zhjHD05VzgvuAxrSzq","C3r5BgvFBw9Kzq","5PI+56s65zcn56EW","Aw5WDxrBBMfTzt0IC2XPzgvYx3n0EwXLiL06y2HLy2TLza","rMXVyxq","AgLKzgvU","y3LIzxjWDw5RAhqUzxjYB3jnAw5nyxHsyw5Nzq","i21HEf92ywW","tK9erv9usvrmrv9iruLhsfq","reLtueXbwsboqu1f","Aw50","mta2otyWog1ttxP4vq","zMLSBfn0EwXL","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpc9IDxr0B24+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgj1DhrVBIbPzd0ICMvZzxrFyNrUiIbZDhLSzt0IcIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGigjHy2TNCM91BMq6igXPBMvHCI1NCMfKAwvUDcG0nwrLzYWGiZy2nIWGiZK5osK7cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGigjVCMrLCJOGBM9UztSkicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGy29SB3i6ihDOAxrLoWOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicbWywrKAw5NoIaXmNb4idi0ChG7cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGig1HCMDPBJOGmcaXmhb4oWOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicbIB3jKzxiTCMfKAxvZoIa4ChG7cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGign1CNnVCJOGCg9PBNrLCJSkicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGzM9UDc13zwLNAhq6igjVBgq7cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGigzVBNqTzMfTAwX5oIaNq291CMLLCIbozxCNlcbTB25VC3bHy2u7cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGiJ4","y3LIzxjWDw5RAhqUDgv4DenVBg9Y","yMvNAw5qyxrO","q3LIzxjWDw5Rste4BG","zhjHD05Vzgu","y3LIzxjWDw5RAhqUB3v0Chv0vhLWzuXHyMvS","pc9Ond4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8is0TienVBg9YifnLBgvJDg9YCYaTlt4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8zgL2ihn0EwXLpsjKAxnWBgf5oIbNCMLKoYbNCMLKlxrLBxbSyxrLlwnVBhvTBNm6idfMCIaXzNiGmwzYidfMCJSGz2fWoIaXmhb4oYbTyxjNAw4TyM90Dg9ToIaXnxb4oYi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXKAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8BgfIzwWGC3r5Bgu9iMrPC3bSyxK6igjSB2nRoYbTyxjNAw4TyM90Dg9ToIa1ChG7ignVBg9YoIaJmdbMzMzMoYbMB250lxnPEMu6ideYChG7ihrLEhqTywXPz246ignLBNrLCJSIpG","zMLSDgvY","DxbKyxrLsw5WDxruExbL","B25eCMf3rM9YzwDYB3vUza","C2XPy2u","zMLUza","C2v0rgLYDhK","ChjVDg90ExbL","5PYa5AsN5yc8","zxHLyW","i3rLEhrFEf9VzMzZzxq","A2v5","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8zgL2ihn0EwXLpsjKAxnWBgf5oIbMBgv4oYbNyxa6ideWChG7igfSAwDUlwL0zw1ZoIbJzw50zxi7iJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgXHyMvSihn0EwXLpsjJB2XVCJOGiZaWzMzMzJSGy3vYC29YoIbWB2LUDgvYoYbKAxnWBgf5oIbMBgv4oYbHBgLNBI1PDgvTCZOGy2vUDgvYoYi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8Aw5WDxqGDhLWzt0ICMfKAw8IigLKpsjZDhLSzv9JEwjLCNb1BMSIig5HBwu9iNnSAwrLCL9ZDhLSzsiGDMfSDwu9iMn5yMvYChvUAYiG","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXPBNb1Dcb0ExbLpsjJB2XVCIiGAwq9iNrYywnRx2jNx2nVBg9YiIb2ywX1zt0I","B25JBgLJAW","nty4ogzewvnKDa","iIakicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGC3r5Bgu9iNDPzhrOoIaXmdaLoYi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGphnWyw4GAwq9iNrLEhrFEv92ywX1zsiGC3r5Bgu9iMnVBg9YoIaJmdbMzMzMoYbMB250lxnPEMu6ideYChG7iJ4","i291Dhb1Df9MBg9HDa","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXPBNb1Dcb0ExbLpsjJB2XVCIiGAwq9iNrLEhrFy29SB3iIihzHBhvLpsi","q29TzNKUq1Lcrvjqvu5lsfq","Dgv4Df95x3zHBhvL","Dgv4Df9ZAxPL","yxbWzw5Kq2HPBgq","BwLU","y2fSBa","i3jLC2v0x2j0BG","C3r5BgvFy3LIzxjWDw5R","C3rYB2TL","Dg9tDhjPBMC","B25PBNb1Da","C3r5BgvFB3jPz2LUywW","i21PBL92ywW","BgvMDa","iZfLmwuYzq","ywrKq29SB3jtDg9W","tufyifzbtfvf","yxjJ","y3LIzxjWDw5Rx3nLDhrPBMDZ","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVBgfIzwW+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0Iy29SB3i6icmWmgzMzMy7ign1CNnVCJOGCg9PBNrLCJSGzgLZCgXHEtOGzMXLEdSGywXPz24TAxrLBxm6ignLBNrLCJSGBwfYz2LUlwXLzNq6ide1ChG7iJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXPBNb1Dcb0ExbLpsjJAgvJA2jVEciGAwq9iNnOB3DFBM9KzsiG","zgL2","rxnJyxbL","Aw5WDxrBBMfTzt0IB3v0Chv0x3r5CguIxtPJAgvJA2vK","y2fSBgjHy2S","BgvUz3rO","i3rLEhrFC2L6zq","Bwf4","i3n0zxbFDMfS","nJK3og1buvvjAa","Bwf4x3zHBhvL","DxbKyxrLrgLZCgXHEu5HBwu","i3rLEhrFEv9VzMzZzxq","Dgv4DenVBNrLBNq","BwLUx3zHBhvL","iGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGC3r5Bgu9iNDPzhrOoIaXmdaLoYbWywrKAw5NoIa4ChG7igjHy2TNCM91BMq6ihjNyMeOmtaSideWlcaXmcWGmc44ktSGyM9YzgvYoIaYChGGC29SAwqGiZaWzMzMzJSGy29SB3i6icmWmgzMzMy7igjVCMrLCI1YywrPDxm6idvWEdSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVzgL2pGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXKAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0IzgLZCgXHEtOGyMXVy2S7ig1HCMDPBI1IB3r0B206idvWEdSGy29SB3i6icmWmgzMzMy7iJ4","iIakicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGC3r5Bgu9iNDPzhrOoIaXmdaLoYbWywrKAw5NoIa4ChG7igjHy2TNCM91BMq6ihjNyMeOmtaSideWlcaXmcWGmc44ktSGyM9YzgvYoIaYChGGC29SAwqGiZaWzMzMzJSGy29SB3i6icmWmgzMzMy7igjVCMrLCI1YywrPDxm6idvWEdSGzM9UDc1Myw1PBhK6icDdB3vYAwvYie5LDYCSig1VBM9ZCgfJztSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGica8zgL2ihn0EwXLpsjTyxjNAw4TyM90Dg9ToIaXnxb4oYi+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgXHyMvSihn0EwXLpsjKAxnWBgf5oIbIBg9JAZSGBwfYz2LUlwjVDhrVBtOGohb4oYbJB2XVCJOGiZaWzMzMzJSGzM9UDc13zwLNAhq6igjVBgq7iJ4","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8Aw5WDxqGDhLWzt0ICMfUz2uIigLKpsj0zxH0x3HFB2zMC2v0iIbTAw49iI01mciGBwf4psiYmdaIihzHBhvLpsi","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8Aw5WDxqGDhLWzt0IDgv4DciGAwq9iMrPC3bSyxLFBMfTzsiGDMfSDwu9iG","ChG8l3nWyw4+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXKAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgXHyMvSihn0EwXLpsjKAxnWBgf5oIbIBg9JAZSGBwfYz2LUlwjVDhrVBtOGnxb4oYbJB2XVCJOGiZaWzMzMzJSGzM9UDc1ZAxPLoIaXmNb4oYi+","BgLUzvDPzhrO","zM9YrwfJAa","pc9IDxr0B24+cIaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaG","C2HHzg93q29SB3i","y2fUDMfZ","y3LIzxjWDw5RAhqUC2v0DgLUz3nuAxrSzq","iIakicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicbZDhLSzt0ID2LKDgG6ideWmcu7igHLAwDODdOGmJvWEdSGyM9YzgvYoIbUB25LoYbIB3jKzxiTCMfKAxvZoIaZChG7ign1CNnVCJOGCg9PBNrLCJSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgrPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0IzgLZCgXHEtOGyMXVy2S7ig1HCMDPBI1IB3r0B206idvWEdSGy29SB3i6icmWmgzMzMy7igzVBNqTC2L6ztOGmtjWEdSGDgv4Dc1HBgLNBJOGy2vUDgvYoYi+","DhjPBq","A2v5zg93BG","iIakicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicbZDhLSzt0ID2LKDgG6ideWmcu7igHLAwDODdOGmJvWEdSGyM9YzgvYoIbUB25LoYbIB3jKzxiTCMfKAxvZoIaZChG7ign1CNnVCJOGCg9PBNrLCJSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8is0TifrLEhqGq29UDhjVBhmGls0+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgrPDIbZDhLSzt0IBwfYz2LUlwjVDhrVBtOGmtvWEdSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8BgfIzwWGC3r5Bgu9iMrPC3bSyxK6igjSB2nRoYbTyxjNAw4TyM90Dg9ToIa4ChG7ignVBg9YoIaJmdbMzMzMoYbMB250lxDLAwDODdOGyM9SzdSIpG","zhjHD05VzgvtAgfWzq","C2v0rgLYDhLdyw52yxm","ywrQDxn0q29SB3i","y3LIzxjWDw5RAhqUDhjHy2Tcz0nVBg9Y","C2f2zq","CMvWBgfJzq","y2XPCa","Dgv4Df9ZAxPLx3zHBhvL","C2vYAwfSAxPL","y3LIzxjWDw5RAhqUBwLUvMfSDwvmywjLBa","DxbKyxrLt3v0Chv0vhLWzq","uMLNAhqTy2XPy2SGDg8GC2v0ihjHBMDLl25HBwu","y3LIzxjWDw5RAhqUDgv4DfLpzMzZzxq","B3b0Aw9UCW","i3nOB3DFBM9Kzq","u1rfua","odKWuLbtBfHK","y3LIzxjWDw5RAhqUzxjYB3jjBNzHBgLKtNvTyMvY","5y+Z6zsU5y+V6k6+572U6iYd5zU0l+wqJEENSa","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVBgfIzwW+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGidWHls0Gq1Lcrvjqvu5liefKDMfUy2vKie9WDgLVBNmGls0+cIaGicaGicaGicaGicaGicaGicaGicaGicaGica8zgL2igLKpsjHzhzHBMnLzf9VChrPB25ZiIbZDhLSzt0IzgLZCgXHEtOG","zgL2w3n0EwXLkJ0ICg9ZAxrPB246igzPEgvKiL0","z2v0t3v0Chv0rgf0yq","ndiWmty1nLPZuefcyG","y3LIzxjWDw5RAhqUDgv4DfHpzMzZzxq","C2HHzg93t2zMC2v0wa","i2uWztzLza","z2v0rxH0CMfnzw51t3b0Aw9UCW","i2zMzMzMzG","CMvNAxn0zxjfEhrLBNnPB24","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGica8Aw5WDxqGDhLWzt0ICMfUz2uIigLKpsj0zxH0x3nPEMuIig1PBJ0IociGBwf4psi1mciGDMfSDwu9iG","C3r5Bgu","y3LIzxjWDw5RAhqUzxjYB3jtDgvWuMfUz2u","6l6t5yE657g75z6l","y3LIzxjWDw5RAhqUC3rLCeXHyMvS","x2HPzgrLBK91Dhb1Dfr5CgvxAwrNzxq","y3LIzxjWDw5RAhqUywr2yw5JzwrpChrPB25Z","B25JAgfUz2u","zhjHD1DPzgDLDhm","y3nZvgv4Da","B25oB2rLq3jLyxrLza","CxvLCNLtzwXLy3rVCG","CgfYC2u","yM9KEq","z2v0rwXLBwvUDej5swq","mJyXouTQuhPVDq","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgLUChv0ihr5Cgu9iM51BwjLCIiGAwq9iNn0zxbFDMfSiIb2ywX1zt0I","AgfZt3DUuhjVCgvYDhK","zMLSBa","Dgv4Df94x29MzNnLDa","z3jHCgG","y3LIzxjWDw5RAhqUBwf4vMfSDwvmywjLBa","BgfIzwW","cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidWVBgfIzwW+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpc9KAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGica8l2rPDJ4kicaGicaGicaGicaGicaGicaGicaGicaGicaGidXKAxyGC3r5Bgu9iMrPC3bSyxK6igDYAwq7igDYAwqTDgvTCgXHDguTy29SDw1UCZOGmwzYidfMCIaXzNi7igDHCdOGmtvWEdSGBwfYz2LUlwjVDhrVBtOGmJbWEdSIpGOGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXKAxy+cIaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGidXSywjLBcbZDhLSzt0IzgLZCgXHEtOGyMXVy2S7ig1HCMDPBI1IB3r0B206idvWEdSGy29SB3i6icmWmgzMzMy7iJ4","y3jLyxrLtgLUzwfYr3jHzgLLBNq","y29TChv0zvnPEMu","i2nHBMnLBf9IDg4","CM91BMq","y3LIzxjWDw5RAhqUC2HVD05VzgvmywjLBa","pc9SywjLBd4kicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGicaGpgLUChv0ihr5Cgu9iM51BwjLCIiGAwq9iM1PBL92ywWIihzHBhvLpsi","y3LIzxjWDw5RAhqUyxbWBhLcDg4","y3LIzxjWDw5RAhqUDgv4DfnPEMu"];return(t=function(){return i})()}function n(){const i=a;document[i(507)](i(409)).forEach((a=>{const c=i,t=a.querySelector("h2"),n=a[c(429)](c(497)),s=a[c(429)](c(346)),e=a[c(429)](c(444));t&&n&&s&&e&&(t[c(372)]=G(c(384)),n.innerHTML=G(c(448)),s.innerHTML=G("cyberpunkht.resetBtn"),e.innerHTML=G(c(528)),a[c(507)]("label")[c(380)]((i=>{const a=c,t=i[a(372)][a(386)]();t[a(526)](a(542))||t[a(526)](a(549))?i[a(372)]=G(a(490)):t[a(526)](a(421))||t[a(526)](a(466))?i[a(372)]=G("cyberpunkht.outputTypeLabel"):t[a(526)](a(521))||t[a(526)]("MIN VALUE")?i.textContent=G(a(398)):t[a(526)](a(567))||t.includes(a(356))?i[a(372)]=G(a(439)):(t[a(526)]("步长")||t[a(526)](a(404)))&&(i[a(372)]=G(a(422)))})))}))}function s(){const i=a,c=LGraphCanvas.prototype[i(389)],G=LGraphCanvas[i(566)][i(540)],t=LGraphCanvas[i(566)].drawNode;LGraphCanvas[i(566)][i(389)]=function(a,G,t,n,s,e,r){const o=i;if(G[o(393)](),a.cyberpunk_settings&&"cyberpunk"===a[o(358)][o(541)])return a[o(358)][o(518)]?(delete a[o(475)],G[o(503)](),void c[o(345)](this,a,G,t,n,s,e,r)):(a[o(475)]=!0,void G[o(503)]());c[o(345)](this,a,G,t,n,s,e,r),G[o(503)]()},LGraphCanvas[i(566)].drawNodeTitle=function(a,c,t,n,s){const e=i;if(!a[e(358)]||e(502)!==a.cyberpunk_settings[e(541)]||a[e(358)][e(518)])return G[e(345)](this,a,c,t,n,s)},LGraphCanvas[i(566)][i(557)]=function(a,c){const G=i;return a[G(358)]&&"cyberpunk"===a[G(358)][G(541)]&&!a[G(358)][G(518)]?(c[G(393)](),a[G(562)]&&a.onDrawForeground(c,this),void c[G(503)]()):t.call(this,a,c)}}window.updateCyberpunkHTTexts=n,window[i(499)]&&window.addEventListener("cyberpunk-language-changed",(function(){const a=i;n(),c[a(438)]&&c.graph[a(451)]&&c[a(438)][a(451)][a(380)]((i=>{const c=a;"CYBERPUNKHT"===i[c(491)]&&i[c(358)]&&(c(407)!==i.cyberpunk_settings.display_name&&c(400)!==i[c(358)][c(457)]||(i[c(358)][c(457)]=G("cyberpunkht.defaultDisplayName"),i[c(370)]&&i.updateDisplayName()))}))})),c[i(417)]({name:i(340),async setup(){s()},async beforeRegisterNodeDef(a,c,t){const n=i;if("CYBERPUNKHT"===c[n(530)]){const i=a[n(566)][n(428)];a[n(566)][n(428)]=function(){const a=n,c=i?i[a(524)](this,arguments):void 0,s=this[a(511)].find((i=>a(544)===i[a(530)]));s&&(s.options[a(344)]=-999999,s[a(402)][a(366)]=999999);const e=this[a(562)];this[a(562)]=function(i){const c=a;if(e&&e.call(this,i),this.flags[c(505)])return;const G=this[c(511)][c(564)]((i=>c(544)===i.name||i[c(440)]===this[c(358)][c(457)]));if(G&&c(513)===G[c(491)]&&c(502)===this[c(358)][c(541)]){const a=20,t=8,n=t/2;let s,e;this.cyberpunk_settings[c(518)]?(e=LiteGraph[c(548)],s=e+10):(e=0,s=25);const r=this.size[0]-2*a,o=G[c(402)][c(366)]-G[c(402)].min,h=Math.max(0,Math.min(1,(G[c(536)]-G[c(402)].min)/o));if(i[c(393)](),i[c(555)](),i[c(539)](a,s,r,t,n),i.fillStyle=this[c(358)][c(452)]||c(354),i.fill(),i.strokeStyle="rgba(0, 0, 0, 0.3)",i[c(379)]=.5,i[c(348)](),i.restore(),h>0){const G=h*r;i[c(393)](),i[c(555)](),i[c(539)](a,s,G,t,n),i[c(395)]();const e=i[c(442)](a,s,a+G,s),o=this[c(358)][c(523)];e[c(355)](0,o),e[c(355)](.5,this.adjustColor(o,30)),e.addColorStop(1,this.adjustColor(o,-30)),i[c(552)]=e,i[c(436)](),i[c(382)]=o,i[c(461)]=6,i.shadowOffsetY=-1,i.fill(),i[c(503)]()}const g=a+h*r,y=s+t/2,z=t;let L;i[c(393)](),i.beginPath(),i.arc(g+1,y+2,.8*z,0,2*Math.PI),i.fillStyle=c(529),i[c(436)](),i[c(555)](),i[c(357)](g,y,z,0,2*Math.PI),i[c(552)]=this[c(358)][c(469)],i.fill(),i[c(503)](),i[c(552)]=this[c(358)][c(532)]||c(414),i[c(460)]=this.cyberpunk_settings.text_size+c(510),i.textAlign=c(353),L=""===this.cyberpunk_settings.display_name?" ":this.cyberpunk_settings[c(457)]||G[c(530)]||" ";const B=(i=>{const a=c;if(i>=1)return 0;const G=i[a(349)]();return G[a(526)]("e")?parseInt(G.split("e-")[1]):G[a(526)](".")?G[a(473)](".")[1].length:0})(G[c(402)][c(527)]||this[c(358)][c(527)]),d=L+" "+Number(G[c(536)])[c(533)](B),w=a+this[c(358)][c(437)],u=s-5+this[c(358)][c(450)];i.save(),i[c(382)]="rgba(0, 0, 0, 0.3)",i[c(461)]=2,i[c(413)]=1,i[c(531)]=1,i.fillText(d,w,u),i[c(503)](),G[c(538)]=s}},this.hexToRgba=function(i,c){const G=a,t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i[G(568)](i);return t?G(482)+parseInt(t[1],16)+", "+parseInt(t[2],16)+", "+parseInt(t[3],16)+", "+c+")":i};const r=this[a(426)];this[a(426)]=function(i,c,G){const t=a;if(t(502)===this.cyberpunk_settings[t(541)]){const a=this[t(511)];this.widgets=this[t(511)][t(560)]((i=>t(513)!==i[t(491)])),r&&r[t(345)](this,i,c,G),this.widgets=a}else r&&r.call(this,i,c,G)},this.cyberpunk_settings={min_value:0,max_value:1,step:.01,display_name:(()=>{const i=a,c=G(i(512));return i(512)===c?i(407):c})(),style_mode:"original",output_type:"float",track_bg_color:a(354),track_color:a(508),handle_color:a(416),text_color:"#e0e6ed",text_size:11,text_x_offset:0,text_y_offset:-12,show_node:!0},this.applyNodeStyles=function(){const i=a;"cyberpunk"===this[i(358)][i(541)]?this[i(358)][i(518)]?delete this._isGradientControlled:this[i(475)]=!0:delete this[i(475)],this[i(390)](!0,!0),t[i(383)]&&(t[i(383)][i(565)](!0,!0),t[i(383)][i(453)](!0,!0))},this[a(561)]=function(){const i=a,c=this.widgets[i(564)]((a=>i(544)===a[i(530)]||a.label===this[i(358)].display_name));if(c){c[i(402)][i(344)]=this.cyberpunk_settings[i(373)],c[i(402)][i(366)]=this[i(358)][i(369)],c[i(402)][i(527)]=this[i(358)].step;let a=c[i(536)];const G=this[i(358)].step;a=Math[i(445)](a/G)*G,a=Math[i(366)](this.cyberpunk_settings[i(373)],Math[i(344)](this[i(358)][i(369)],a));const t=G>=1?0:G.toString()[i(473)](".")[1]?.[i(364)]||0;a=parseFloat(a[i(533)](t)),c[i(536)]=a;const n=c[i(363)];c.callback=function(a,...c){const G=i,t=this[G(402)][G(527)];let s=Math[G(445)](a/t)*t;s=Math.max(this.options.min,Math[G(344)](this[G(402)][G(366)],s));const e=t>=1?0:t[G(349)]()[G(473)](".")[1]?.[G(364)]||0;return s=parseFloat(s.toFixed(e)),s>this[G(402)][G(366)]&&(s=this[G(402)].max),si(544)===a[i(530)]||a[i(440)]===this[i(358)][i(457)]));c&&this[i(358)].display_name&&(c.label=this[i(358)][i(457)],this[i(443)](),this[i(390)](!0,!0),t.canvas&&(t.canvas[i(565)](!0,!0),t.canvas[i(453)](!0,!0)))},this[a(391)]=function(i,c,G=1){const t=a,n=i[t(394)]("#","");return t(482)+Math[t(366)](0,Math[t(344)](255,parseInt(n[t(563)](0,2),16)+c))+", "+Math.max(0,Math[t(344)](255,parseInt(n[t(563)](2,4),16)+c))+", "+Math[t(366)](0,Math[t(344)](255,parseInt(n[t(563)](4,6),16)+c))+", "+G+")"},this[a(472)]=function(i){const c=a;let G=Math[c(366)](this[c(358)][c(373)],Math.min(this[c(358)][c(369)],i));const t=this[c(358)][c(527)];G=Math[c(445)](G/t)*t;const n=t>=1?0:t.toString().split(".")[1]?.[c(364)]||0;return G=parseFloat(G[c(533)](n)),G=Math[c(366)](this[c(358)].min_value,Math.min(this[c(358)][c(369)],G)),c(550)===this.cyberpunk_settings.output_type?Math[c(445)](G):G};const o=this[a(410)];this.getOutputData=function(i){const c=a,G=o?o.call(this,i):this[c(511)][0][c(536)];return this[c(472)](G)},this[a(458)](a(465),a(487),this[a(358)][a(487)],(function(i){const c=a;this[c(358)][c(487)]=i}),{values:[a(522),a(550)]});const h=this.widgets[a(564)]((i=>a(487)===i[a(530)]));h&&(h[a(491)]=a(545),h[a(443)]=()=>[0,0],h.draw=function(){},h.mouse=function(){return!1},this[a(423)]=h),this[a(484)]=function(){const i=a,c=this[i(423)]||this.widgets[i(564)]((a=>i(487)===a[i(530)]));c&&(c[i(536)]=this[i(358)][i(487)])};const g=this[a(537)];this[a(537)]=function(){return g?g[a(524)](this,arguments):void 0},this[a(399)]=function(){const i=a;this.syncOutputTypeWidget(),this[i(390)](!0,!0)},setTimeout((()=>{const i=a;this[i(561)](),this[i(370)](),this[i(399)]()}),100);const y=this[a(397)];this[a(397)]=function(){const i=a,c=y?y.apply(this):{};return c.cyberpunk_settings=this.cyberpunk_settings,this[i(484)](),c};const z=this[a(500)];return this[a(500)]=function(i){const c=a;z&&z[c(524)](this,arguments),i[c(358)]&&(this.cyberpunk_settings={...this.cyberpunk_settings,...i[c(358)]},setTimeout((()=>{const i=c;this[i(561)](),this[i(370)](),this.updateOutputType(),this[i(496)](),this[i(484)]()}),100))},c};const c=a.prototype[n(415)];a[n(566)][n(415)]=function(i,a){const t=n,s=c?c[t(524)](this,arguments):void 0;return a.unshift({content:G(t(384)),callback:()=>{const i=t,a=document[i(479)](i(360));a[i(419)][i(427)]="\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: linear-gradient(135deg, #0a0a0a 0%, #1a1a2e 50%, #16213e 100%);\n border: 2px solid #00ffff;\n border-radius: 15px;\n padding: 25px;\n z-index: 10000;\n color: #00ffff;\n font-family: 'Courier New', monospace;\n min-width: 400px;\n backdrop-filter: blur(10px);\n ",a[i(477)]='\n
\n

\n '+G(i(384))+i(498)+G(i(490))+i(377)+this[i(358)].display_name+i(375)+G(i(558))+i(486)+(i(522)===this[i(358)][i(487)]?"checked":"")+' \n style="margin-right: 5px;">\n '+G(i(471))+i(493)+(i(550)===this.cyberpunk_settings[i(487)]?i(478):"")+i(515)+G(i(464))+i(441)+G(i(398))+i(447)+this[i(358)][i(373)]+'" \n style="width: 100%; padding: 8px; background: rgba(10, 10, 10, 0.8); border: 2px solid #00ffff; color: #00ffff; border-radius: 5px;">\n

\n
\n
\n \n
\n \n \n
\n
\n \n \n \n