Files

174 lines
6.7 KiB
Python

import json
import os
import folder_paths
LORA_FUZZY_SEARCH_SETTING_ID = "MNeMiC.LoRALoading.FuzzySearch"
LORA_CONSOLE_LOG_SETTING_ID = "MNeMiC.LoRALoading.ConsoleLogging"
LORA_MAX_LOGGED_CANDIDATES_SETTING_ID = "MNeMiC.LoRALoading.MaxLoggedCandidates"
WILDCARD_FUZZY_SEARCH_SETTING_ID = "MNeMiC.WildcardProcessing.FuzzySearch"
WILDCARD_CONSOLE_LOG_SETTING_ID = "MNeMiC.WildcardProcessing.ConsoleLogging"
WILDCARD_MAX_LOGGED_CANDIDATES_SETTING_ID = "MNeMiC.WildcardProcessing.MaxLoggedCandidates"
WILDCARD_MAX_NESTED_PASSES_SETTING_ID = "MNeMiC.WildcardProcessing.MaxNestedPasses"
GROQ_LLM_CONSOLE_LOG_SETTING_ID = "MNeMiC.GroqLLM.ConsoleLogging"
GROQ_LLM_TIMEOUT_SETTING_ID = "MNeMiC.GroqLLM.RequestTimeout"
GROQ_COMPLETION_CONSOLE_LOG_SETTING_ID = "MNeMiC.GroqCompletion.ConsoleLogging"
GROQ_COMPLETION_TIMEOUT_SETTING_ID = "MNeMiC.GroqCompletion.RequestTimeout"
GROQ_TRANSCRIBE_CONSOLE_LOG_SETTING_ID = "MNeMiC.GroqTranscribe.ConsoleLogging"
GROQ_TRANSCRIBE_TIMEOUT_SETTING_ID = "MNeMiC.GroqTranscribe.RequestTimeout"
GROQ_TRANSLATE_CONSOLE_LOG_SETTING_ID = "MNeMiC.GroqTranslate.ConsoleLogging"
GROQ_TRANSLATE_TIMEOUT_SETTING_ID = "MNeMiC.GroqTranslate.RequestTimeout"
LLM_CONSOLE_LOG_SETTING_ID = "MNeMiC.LLM.ConsoleLogging"
LLM_TIMEOUT_SETTING_ID = "MNeMiC.LLM.RequestTimeout"
LLM_STREAM_SETTING_ID = "MNeMiC.LLM.LivePreview"
DEFAULT_MAX_LOGGED_CANDIDATES = 15
DEFAULT_MAX_NESTED_PASSES = 10
DEFAULT_GROQ_REQUEST_TIMEOUT = 120
DEFAULT_LLM_REQUEST_TIMEOUT = 300
PROMPT_PROPERTY_EXTRACTOR_CONSOLE_LOG_SETTING_ID = "MNeMiC.PromptPropertyExtractor.ConsoleLogging"
LOAD_RANDOM_CHECKPOINT_CONSOLE_LOG_SETTING_ID = "MNeMiC.LoadRandomCheckpoint.ConsoleLogging"
def get_comfy_setting(setting_id, default=None):
"""Read a value from the (default) user's comfy.settings.json.
ComfyUI's Settings panel stores values server-side per user. Node
execution has no request/user context, so this looks at the "default"
user, which is what a standard single-user install uses.
"""
try:
if hasattr(folder_paths, "get_public_user_directory"):
user_dir = folder_paths.get_public_user_directory("default")
else:
user_dir = os.path.join(folder_paths.get_user_directory(), "default")
settings_path = os.path.join(user_dir, "comfy.settings.json")
with open(settings_path, "r", encoding="utf-8") as f:
settings = json.load(f)
return settings.get(setting_id, default)
except (OSError, ValueError, AttributeError):
return default
def get_comfy_int_setting(setting_id, default):
try:
return int(get_comfy_setting(setting_id, default))
except (TypeError, ValueError):
return default
def is_lora_fuzzy_search_enabled():
return bool(get_comfy_setting(LORA_FUZZY_SEARCH_SETTING_ID, False))
def is_lora_console_log_enabled():
return bool(get_comfy_setting(LORA_CONSOLE_LOG_SETTING_ID, False))
def is_wildcard_fuzzy_search_enabled():
return bool(get_comfy_setting(WILDCARD_FUZZY_SEARCH_SETTING_ID, False))
def is_wildcard_console_log_enabled():
return bool(get_comfy_setting(WILDCARD_CONSOLE_LOG_SETTING_ID, False))
def get_lora_max_logged_candidates():
return get_comfy_int_setting(LORA_MAX_LOGGED_CANDIDATES_SETTING_ID, DEFAULT_MAX_LOGGED_CANDIDATES)
def get_wildcard_max_logged_candidates():
return get_comfy_int_setting(WILDCARD_MAX_LOGGED_CANDIDATES_SETTING_ID, DEFAULT_MAX_LOGGED_CANDIDATES)
def get_wildcard_max_nested_passes():
return get_comfy_int_setting(WILDCARD_MAX_NESTED_PASSES_SETTING_ID, DEFAULT_MAX_NESTED_PASSES)
def is_groq_llm_console_log_enabled():
return bool(get_comfy_setting(GROQ_LLM_CONSOLE_LOG_SETTING_ID, False))
def get_groq_llm_request_timeout():
return get_comfy_int_setting(GROQ_LLM_TIMEOUT_SETTING_ID, DEFAULT_GROQ_REQUEST_TIMEOUT)
def is_groq_completion_console_log_enabled():
return bool(get_comfy_setting(GROQ_COMPLETION_CONSOLE_LOG_SETTING_ID, False))
def get_groq_completion_request_timeout():
return get_comfy_int_setting(GROQ_COMPLETION_TIMEOUT_SETTING_ID, DEFAULT_GROQ_REQUEST_TIMEOUT)
def is_groq_transcribe_console_log_enabled():
return bool(get_comfy_setting(GROQ_TRANSCRIBE_CONSOLE_LOG_SETTING_ID, False))
def get_groq_transcribe_request_timeout():
return get_comfy_int_setting(GROQ_TRANSCRIBE_TIMEOUT_SETTING_ID, DEFAULT_GROQ_REQUEST_TIMEOUT)
def is_groq_translate_console_log_enabled():
return bool(get_comfy_setting(GROQ_TRANSLATE_CONSOLE_LOG_SETTING_ID, False))
def get_groq_translate_request_timeout():
return get_comfy_int_setting(GROQ_TRANSLATE_TIMEOUT_SETTING_ID, DEFAULT_GROQ_REQUEST_TIMEOUT)
def is_prompt_property_extractor_console_log_enabled():
return bool(get_comfy_setting(PROMPT_PROPERTY_EXTRACTOR_CONSOLE_LOG_SETTING_ID, False))
def is_load_random_checkpoint_console_log_enabled():
return bool(get_comfy_setting(LOAD_RANDOM_CHECKPOINT_CONSOLE_LOG_SETTING_ID, False))
def is_llm_console_log_enabled():
return bool(get_comfy_setting(LLM_CONSOLE_LOG_SETTING_ID, False))
def get_llm_request_timeout():
return get_comfy_int_setting(LLM_TIMEOUT_SETTING_ID, DEFAULT_LLM_REQUEST_TIMEOUT)
def is_llm_live_preview_enabled():
return bool(get_comfy_setting(LLM_STREAM_SETTING_ID, True))
# One toggle per built-in endpoint, so users can declutter the dropdown
# without editing DefaultEndpoints.json. Endpoints added in UserEndpoints.json
# have no entry here and are always shown.
LLM_ENDPOINT_VISIBILITY_IDS = {
"Ollama (this PC)": "MNeMiC.LLM.ShowEndpoint.OllamaLocal",
"Ollama (network)": "MNeMiC.LLM.ShowEndpoint.OllamaNetwork",
"LM Studio (this PC)": "MNeMiC.LLM.ShowEndpoint.LMStudio",
"OpenAI-compatible server": "MNeMiC.LLM.ShowEndpoint.OpenAICompatible",
"Claude Code Subscription": "MNeMiC.LLM.ShowEndpoint.ClaudeCodeSubscription",
"Codex Subscription": "MNeMiC.LLM.ShowEndpoint.CodexSubscription",
"OpenAI (ChatGPT)": "MNeMiC.LLM.ShowEndpoint.OpenAI",
"Anthropic (Claude)": "MNeMiC.LLM.ShowEndpoint.Anthropic",
"Google (Gemini)": "MNeMiC.LLM.ShowEndpoint.Gemini",
"xAI (Grok)": "MNeMiC.LLM.ShowEndpoint.Grok",
"Groq": "MNeMiC.LLM.ShowEndpoint.Groq",
"OpenRouter": "MNeMiC.LLM.ShowEndpoint.OpenRouter",
"Mistral": "MNeMiC.LLM.ShowEndpoint.Mistral",
"DeepSeek": "MNeMiC.LLM.ShowEndpoint.DeepSeek",
"A Thousand Words": "MNeMiC.LLM.ShowEndpoint.AThousandWords",
"Sanctum": "MNeMiC.LLM.ShowEndpoint.Sanctum",
"Custom Endpoint - WARNING": "MNeMiC.LLM.ShowEndpoint.CustomEndpoint",
}
LLM_ENDPOINT_HIDDEN_BY_DEFAULT = {"Sanctum"}
def is_llm_endpoint_visible(name):
setting_id = LLM_ENDPOINT_VISIBILITY_IDS.get(name)
if setting_id is None:
return True
return bool(get_comfy_setting(setting_id, name not in LLM_ENDPOINT_HIDDEN_BY_DEFAULT))