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:
+14
-3
@@ -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
@@ -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}',
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user