Merge pull request #2 from AdamShuo/feature/enhanced-ui-and-functionality

feat: 增强用户体验和功能扩展

将文本生成和图像理解模块的模型选择改为下拉式选择框
文本生成模块新增视觉模型选项,支持多模态文本生成
图像编辑模块新增降噪(denoise)参数,支持0.00-1.00范围调节
图像编辑模块新增图像生成模型选项,支持低重绘度洗图
提升API Token安全性,界面不再明码显示敏感信息
优化token处理逻辑,支持自动加载已保存token
This commit is contained in:
hujuying
2025-09-07 20:46:29 +08:00
committed by GitHub
4 changed files with 59 additions and 25 deletions
+14 -3
View File
@@ -12,22 +12,33 @@
"default_text_model": "Qwen/Qwen3-Coder-480B-A35B-Instruct",
"default_system_prompt": "You are a helpful assistant.",
"default_user_prompt": "你好",
"api_token": "",
"api_token": "ms-561cde2a-253e-4fc8-8d33-6f8afcffdeaa",
"image_models": [
"Qwen/Qwen-Image",
"MusePublic/489_ckpt_FLUX_1",
"MusePublic/flux-high-res",
"black-forest-labs/FLUX.1-dev",
"black-forest-labs/FLUX.1-Canny-dev",
"black-forest-labs/FLUX.1-Depth-dev",
"black-forest-labs/FLUX.1-Fill-dev",
"black-forest-labs/FLUX.1-Krea-dev",
"MAILAND/majicflus_v1"
],
"image_edit_models": [
"Qwen/Qwen-Image-Edit",
"MusePublic/FLUX.1-Kontext-Dev"
"MusePublic/FLUX.1-Kontext-Dev",
"black-forest-labs/FLUX.1-Kontext-dev"
],
"text_models": [
"Qwen/Qwen3-Coder-480B-A35B-Instruct",
"Qwen/Qwen3-Coder-480B-A35B-Chat",
"Qwen/Qwen3-235B-A22B-Thinking-2507",
"Qwen3-235B-A22B-Instruct-2507",
"Qwen/Qwen3-Coder-140B-A35B-Instruct",
"Qwen/Qwen3-Coder-70B-A35B-Instruct"
"Qwen/Qwen3-Coder-70B-A35B-Instruct",
"deepseek-ai/DeepSeek-V3.1",
"deepseek-ai/DeepSeek-R1-0528",
"ZhipuAI/GLM-4.5"
],
"vision_models": [
"stepfun-ai/step3",
+31 -14
View File
@@ -106,8 +106,9 @@ class ModelScopeImageNode:
"default": config.get("default_prompt", "A beautiful landscape")
}),
"api_token": ("STRING", {
"default": saved_token,
"placeholder": "请输入您的魔搭API Token"
"default": "",
"placeholder": "请输入您的魔搭API Token",
"multiline": False
}),
},
"optional": {
@@ -157,7 +158,9 @@ class ModelScopeImageNode:
def generate_image(self, prompt, api_token, model="Qwen/Qwen-Image", negative_prompt="", width=512, height=512, seed=-1, steps=30, guidance=7.5):
config = load_config()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token")
api_token = load_api_token()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token或确保已保存token")
saved_token = load_api_token()
if api_token != saved_token:
if save_api_token(api_token):
@@ -282,12 +285,13 @@ class ModelScopeImageEditNode:
"default": "修改图片中的内容"
}),
"api_token": ("STRING", {
"default": saved_token,
"placeholder": "请输入您的魔搭API Token"
"default": "",
"placeholder": "请输入您的魔搭API Token",
"multiline": False
}),
},
"optional": {
"model": (config.get("image_edit_models", ["Qwen/Qwen-Image-Edit"]), {
"model": (config.get("image_edit_models", ["Qwen/Qwen-Image-Edit"]) + config.get("image_models", []), {
"default": "Qwen/Qwen-Image-Edit"
}),
"negative_prompt": ("STRING", {
@@ -323,6 +327,12 @@ class ModelScopeImageEditNode:
"min": -1,
"max": 2147483647
}),
"denoise": ("FLOAT", {
"default": 0.75,
"min": 0.00,
"max": 1.00,
"step": 0.01
}),
}
}
@@ -332,16 +342,19 @@ class ModelScopeImageEditNode:
CATEGORY = "ModelScopeAPI"
def edit_image(self, image, prompt, api_token, model="Qwen/Qwen-Image-Edit", negative_prompt="",
width=512, height=512, steps=30, guidance=3.5, seed=-1):
width=512, height=512, steps=30, guidance=3.5, seed=-1, denoise=0.75):
config = load_config()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token")
saved_token = load_api_token()
if api_token != saved_token:
if save_api_token(api_token):
print("✅ API Token已自动保存")
else:
print("⚠️ API Token保存失败,但不影响当前使用")
api_token = load_api_token()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token或确保已保存token")
else:
saved_token = load_api_token()
if api_token != saved_token:
if save_api_token(api_token):
print("✅ API Token已自动保存")
else:
print("⚠️ API Token保存失败,但不影响当前使用")
try:
# 将图像转换为临时文件并上传获取URL
@@ -419,6 +432,10 @@ class ModelScopeImageEditNode:
if seed != -1:
payload['seed'] = seed
print(f"🎲 随机种子: {seed}")
if denoise != 0.75:
payload['denoise'] = denoise
print(f"🎚️ 降噪强度: {denoise}")
headers = {
'Authorization': f'Bearer {api_token}',
+7 -4
View File
@@ -83,8 +83,9 @@ class ModelScopeTextNode:
"default": config.get("default_user_prompt", "你好")
}),
"api_token": ("STRING", {
"default": saved_token,
"placeholder": "请输入您的魔搭API Token"
"default": "",
"placeholder": "请输入您的魔搭API Token",
"multiline": False
}),
},
"optional": {
@@ -92,7 +93,7 @@ class ModelScopeTextNode:
"multiline": True,
"default": config.get("default_system_prompt", "You are a helpful assistant.")
}),
"model": ("STRING", {
"model": (config.get("text_models", ["Qwen/Qwen3-Coder-480B-A35B-Instruct"]) + config.get("vision_models", []), {
"default": config.get("default_text_model", "Qwen/Qwen3-Coder-480B-A35B-Instruct")
}),
"max_tokens": ("INT", {
@@ -124,7 +125,9 @@ class ModelScopeTextNode:
config = load_config()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token")
api_token = load_api_token()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token或确保已保存token")
saved_token = load_api_token()
if api_token != saved_token:
+7 -4
View File
@@ -112,12 +112,13 @@ class ModelScopeVisionNode:
"default": config.get("default_prompt", "描述这幅图")
}),
"api_token": ("STRING", {
"default": saved_token,
"placeholder": "请输入您的魔搭API Token"
"default": "",
"placeholder": "请输入您的魔搭API Token",
"multiline": False
}),
},
"optional": {
"model": ("STRING", {
"model": (config.get("vision_models", ["stepfun-ai/step3"]), {
"default": config.get("default_vision_model", "stepfun-ai/step3")
}),
"max_tokens": ("INT", {
@@ -146,7 +147,9 @@ class ModelScopeVisionNode:
config = load_config()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token")
api_token = load_api_token()
if not api_token or api_token.strip() == "":
raise Exception("请输入有效的API Token或确保已保存token")
saved_token = load_api_token()
if api_token != saved_token: