mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-07-12 01:17:12 +08:00
Compare commits
19 Commits
71822e3ca6
...
2e1c579e0d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e1c579e0d | ||
|
|
e11e9034ce | ||
|
|
fb75c048bd | ||
|
|
f7fd701e19 | ||
|
|
cf883eb762 | ||
|
|
45891097bb | ||
|
|
43d5c1188b | ||
|
|
f0919a4bbe | ||
|
|
4da6b807f6 | ||
|
|
b59eb64c22 | ||
|
|
5513395ace | ||
|
|
f3c003dd20 | ||
|
|
5427efda58 | ||
|
|
9a827e409a | ||
|
|
ec2023a5a3 | ||
|
|
9a0b2c40f1 | ||
|
|
62fd58524f | ||
|
|
fb822c6f24 | ||
|
|
edcfb6a35a |
@ -33152,6 +33152,9 @@
|
||||
"https://github.com/Azornes/Comfyui-Resolution-Master"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"preemptions": [
|
||||
"ResolutionMaster"
|
||||
],
|
||||
"description": " Precise resolution and aspect ratio control for ComfyUI"
|
||||
},
|
||||
{
|
||||
@ -54041,7 +54044,7 @@
|
||||
"https://github.com/kgilper/krea-reference"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Give each reference image a job before it reaches Krea 2. Guide cards assign per-image roles (keep the same subject, suggest the visual style, copy lighting or pose, big shapes only, avoid copying text/logos) and the stack encoder builds Krea conditioning with per-card strength, per-layer gains, and guarded prompt handling."
|
||||
"description": "Give each reference image a job, and every attribute a dial. Guide cards assign per-image roles (keep the same subject, suggest the visual style, copy lighting or pose, big shapes only, avoid copying text/logos) with per-card strength, timing, and user-defined recipes - and Concept Slider cards turn any attribute you can name (brightness, age, fog density) into a training-free -6..+6 dial derived from Krea 2 text encoding."
|
||||
},
|
||||
{
|
||||
"author": "DutchyDutch",
|
||||
|
||||
@ -752,7 +752,6 @@
|
||||
"GrsaiFluxKontext_MultiImageToImage",
|
||||
"GrsaiFluxKontext_TextToImage",
|
||||
"Grsai_GPTImage",
|
||||
"Grsai_GPTImageVIP",
|
||||
"Grsai_NanoBanana",
|
||||
"Grsai_NanoBanana2",
|
||||
"Grsai_NanoBananaPro"
|
||||
@ -3988,6 +3987,9 @@
|
||||
{
|
||||
"author": "Azornes",
|
||||
"description": "Logging Configuration",
|
||||
"preemptions": [
|
||||
"ResolutionMaster"
|
||||
],
|
||||
"title": "AzLogs",
|
||||
"title_aux": "Comfyui-Resolution-Master"
|
||||
}
|
||||
@ -17719,6 +17721,18 @@
|
||||
"title_aux": "ComfyUI-Montagen"
|
||||
}
|
||||
],
|
||||
"https://github.com/Moon-NE/MoonNe_Nodes": [
|
||||
[
|
||||
"BatchConditionalText",
|
||||
"BatchConditionalTextWeight",
|
||||
"Moon_NE_Text_Concatenate",
|
||||
"TextHorizontalToVertical",
|
||||
"batch_randoml_text"
|
||||
],
|
||||
{
|
||||
"title_aux": "MoonNe_Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/MoonHugo/ComfyUI-BAGEL-Hugo": [
|
||||
[
|
||||
"BagelByHugo"
|
||||
@ -20976,223 +20990,6 @@
|
||||
"title_aux": "ComfyUI-PromptUtils"
|
||||
}
|
||||
],
|
||||
"https://github.com/Runware/ComfyUI-Runware": [
|
||||
[
|
||||
"Runware 3D Inference",
|
||||
"Runware 3D Inference Inputs",
|
||||
"Runware 3D Inference Settings",
|
||||
"Runware 3D Inference Settings Draco Compression",
|
||||
"Runware 3D Inference Settings Mesh Cluster",
|
||||
"Runware 3D Inference Settings Shape Slat",
|
||||
"Runware 3D Inference Settings Sparse Structure",
|
||||
"Runware 3D Inference Settings Tex Slat",
|
||||
"Runware 3D Model Search",
|
||||
"Runware API Manager",
|
||||
"Runware Accelerator Options",
|
||||
"Runware Alibaba Provider Settings",
|
||||
"Runware Audio Inference",
|
||||
"Runware Audio Inference Inputs",
|
||||
"Runware Audio Inference Inputs Reference Audio",
|
||||
"Runware Audio Inference Settings",
|
||||
"Runware Audio Inference Settings Voice Modify",
|
||||
"Runware Audio Inference Speech",
|
||||
"Runware Audio Inference Speech Voices",
|
||||
"Runware Audio Model Search",
|
||||
"Runware Audio Sections",
|
||||
"Runware Background Removal",
|
||||
"Runware BlackForest Labs Provider Settings",
|
||||
"Runware Bria Provider Mask",
|
||||
"Runware Bria Provider Settings",
|
||||
"Runware Bytedance Provider Settings",
|
||||
"Runware ControlNet",
|
||||
"Runware ControlNet Combine",
|
||||
"Runware ControlNet PreProcessor",
|
||||
"Runware ElevenLabs Provider Settings",
|
||||
"Runware ElevenLabs Provider Settings Sections",
|
||||
"Runware Embedding Search",
|
||||
"Runware Embeddings Combine",
|
||||
"Runware Frame Images",
|
||||
"Runware Google Provider Settings",
|
||||
"Runware IPAdapter",
|
||||
"Runware IPAdapters Combine",
|
||||
"Runware Image Advanced Feature Input",
|
||||
"Runware Image Caption",
|
||||
"Runware Image Inference",
|
||||
"Runware Image Inference Inputs",
|
||||
"Runware Image Inference Inputs Fonts",
|
||||
"Runware Image Inference Settings Color Palette",
|
||||
"Runware Image Inference Settings Moodboards",
|
||||
"Runware Image Inference Settings Prompt Enhance",
|
||||
"Runware Image Inference Settings Scoring Rubric",
|
||||
"Runware Image Inference Settings Scoring Rubric Combine",
|
||||
"Runware Image Inference Settings Structured Prompt",
|
||||
"Runware Image Inference Ultralytics",
|
||||
"Runware Image Masking",
|
||||
"Runware Image Upscaler",
|
||||
"Runware Image Upscaler Settings",
|
||||
"Runware Imagen Inference",
|
||||
"Runware Input Audios",
|
||||
"Runware Kling MultiPrompt Segment",
|
||||
"Runware Kling Provider Settings MultiPrompt",
|
||||
"Runware KlingAI Provider Settings",
|
||||
"Runware Kontext Inference",
|
||||
"Runware Lightricks Provider Settings",
|
||||
"Runware Load Mesh",
|
||||
"Runware Lora Combine",
|
||||
"Runware Lora Search",
|
||||
"Runware Luma Provider Settings",
|
||||
"Runware Media Upload",
|
||||
"Runware Midjourney Provider Settings",
|
||||
"Runware MiniMax Provider Settings",
|
||||
"Runware Mirelo Provider Settings",
|
||||
"Runware Model Search",
|
||||
"Runware Multi Inference",
|
||||
"Runware OpenAI Provider Settings",
|
||||
"Runware Outpaint",
|
||||
"Runware PhotoMaker V2",
|
||||
"Runware Pixverse Provider Settings",
|
||||
"Runware Provider Settings Recraft Color",
|
||||
"Runware Recraft Provider Settings",
|
||||
"Runware Reference Audios",
|
||||
"Runware Reference Images",
|
||||
"Runware Reference Videos",
|
||||
"Runware Reference Voices",
|
||||
"Runware Refiner",
|
||||
"Runware Regional Prompting Advanced Feature",
|
||||
"Runware Regional Prompting Advanced Feature Regions",
|
||||
"Runware Runway Provider Settings",
|
||||
"Runware Safety Inputs",
|
||||
"Runware Save 3D",
|
||||
"Runware Save Image",
|
||||
"Runware Save Text",
|
||||
"Runware Settings",
|
||||
"Runware Sourceful Provider Settings",
|
||||
"Runware Sourceful Provider Settings Fonts",
|
||||
"Runware Speech Inputs Combine",
|
||||
"Runware Sync Provider Settings",
|
||||
"Runware Sync Segment",
|
||||
"Runware Text Inference",
|
||||
"Runware Text Inference Inputs",
|
||||
"Runware Text Inference Inputs Images",
|
||||
"Runware Text Inference Inputs Videos",
|
||||
"Runware Text Inference Message",
|
||||
"Runware Text Inference Messages",
|
||||
"Runware Text Inference Settings",
|
||||
"Runware Text Inference Settings Cache",
|
||||
"Runware Text Inference Tool Choice",
|
||||
"Runware Text Model Search",
|
||||
"Runware VAE Search",
|
||||
"Runware Vectorize",
|
||||
"Runware Video Advanced Feature Inputs",
|
||||
"Runware Video Audio Input",
|
||||
"Runware Video Background Removal",
|
||||
"Runware Video Inference",
|
||||
"Runware Video Inference Elements",
|
||||
"Runware Video Inference Elements Combine",
|
||||
"Runware Video Inference Inputs",
|
||||
"Runware Video Inference Inputs Reference Audios",
|
||||
"Runware Video Inference Inputs Reference Images",
|
||||
"Runware Video Inference Inputs Reference Images Multiple Images Connector",
|
||||
"Runware Video Inference Inputs Reference Videos",
|
||||
"Runware Video Inference Inputs Reference Voices",
|
||||
"Runware Video Inference Lora",
|
||||
"Runware Video Inference Outputs",
|
||||
"Runware Video Inference Settings",
|
||||
"Runware Video Inference Settings Active Speaker Bounding Boxes",
|
||||
"Runware Video Inference Settings Active Speaker Detection",
|
||||
"Runware Video Inference Settings Edit",
|
||||
"Runware Video Inference Settings Segments",
|
||||
"Runware Video Inference Settings Source Position",
|
||||
"Runware Video Inference Settings TTS",
|
||||
"Runware Video Inference Speech Input",
|
||||
"Runware Video Inputs Frame Images",
|
||||
"Runware Video Inputs References",
|
||||
"Runware Video Model Search",
|
||||
"Runware Video Speech Input",
|
||||
"Runware Video Transcription",
|
||||
"Runware Video Upscaler",
|
||||
"Runware Vidu Provider Settings",
|
||||
"Runware Wan Animate Advanced Feature Settings",
|
||||
"Runware Watermark Advanced Feature",
|
||||
"Runware xAI Provider Settings",
|
||||
"Runware3DInference",
|
||||
"Runware3DInferenceInputs",
|
||||
"Runware3DInferenceSettings",
|
||||
"Runware3DInferenceSettingsDracoCompression",
|
||||
"Runware3DInferenceSettingsMeshCluster",
|
||||
"Runware3DInferenceSettingsShapeSlat",
|
||||
"Runware3DInferenceSettingsSparseStructure",
|
||||
"Runware3DInferenceSettingsTexSlat",
|
||||
"RunwareAlibabaProviderSettings",
|
||||
"RunwareAudioInferenceInputs",
|
||||
"RunwareAudioInferenceReferenceVoices",
|
||||
"RunwareAudioInferenceSpeech",
|
||||
"RunwareAudioInferenceSpeechVoices",
|
||||
"RunwareAudioInput",
|
||||
"RunwareAudioSettings",
|
||||
"RunwareAudioSettingsVoiceModify",
|
||||
"RunwareBlackForestProviderSettings",
|
||||
"RunwareBriaProviderMask",
|
||||
"RunwareBriaProviderSettings",
|
||||
"RunwareBytedanceProviderSettings",
|
||||
"RunwareFrameImages",
|
||||
"RunwareGoogleProviderSettings",
|
||||
"RunwareImageInferenceAdvancedFeatures",
|
||||
"RunwareImageInferenceSettingsPromptEnhance",
|
||||
"RunwareImageInferenceSettingsStructuredPrompt",
|
||||
"RunwareKlingMultiPromptSegment",
|
||||
"RunwareKlingProviderSettings",
|
||||
"RunwareKlingProviderSettingsMultiPrompt",
|
||||
"RunwareLightricksProviderSettings",
|
||||
"RunwareLoadMesh",
|
||||
"RunwareLumaProviderSettings",
|
||||
"RunwareMidjourneyProviderSettings",
|
||||
"RunwareMiniMaxProviderSettings",
|
||||
"RunwareMireloProviderSettings",
|
||||
"RunwareOpenAIProviderSettings",
|
||||
"RunwarePixverseProviderSettings",
|
||||
"RunwareRecraftColor",
|
||||
"RunwareRecraftProviderSettings",
|
||||
"RunwareRegionalPromptingAdvancedFeature",
|
||||
"RunwareRegionalPromptingAdvancedFeatureRegions",
|
||||
"RunwareRunwayProviderSettings",
|
||||
"RunwareSafetyInputs",
|
||||
"RunwareSave3D",
|
||||
"RunwareSourcefulProviderSettings",
|
||||
"RunwareSourcefulProviderSettingsFonts",
|
||||
"RunwareSpeechInput",
|
||||
"RunwareSpeechInputCombine",
|
||||
"RunwareSyncProviderSettings",
|
||||
"RunwareSyncSegment",
|
||||
"RunwareTextInferenceSettingsCache",
|
||||
"RunwareTextInferenceToolChoice",
|
||||
"RunwareUltralyticsInputs",
|
||||
"RunwareUltralyticsProviderSettings",
|
||||
"RunwareVectorize",
|
||||
"RunwareVideoAdvancedFeatureInputs",
|
||||
"RunwareVideoBgRemoval",
|
||||
"RunwareVideoInferenceOutputs",
|
||||
"RunwareVideoInferenceSettingsActiveSpeakerBoundingBoxes",
|
||||
"RunwareVideoInferenceSettingsActiveSpeakerDetection",
|
||||
"RunwareVideoInferenceSettingsControl",
|
||||
"RunwareVideoInferenceSettingsSegments",
|
||||
"RunwareVideoInferenceSettingsSourcePosition",
|
||||
"RunwareVideoInferenceSettingsTts",
|
||||
"RunwareVideoInferenceSpeechInput",
|
||||
"RunwareVideoInputsFrameImages",
|
||||
"RunwareVideoInputsReferenceImagesMultipleImagesConnector",
|
||||
"RunwareVideoInputsReferences",
|
||||
"RunwareVideoSettings",
|
||||
"RunwareVideoUpscaler",
|
||||
"RunwareWanAnimateAdvancedFeatureSettings",
|
||||
"RunwareWatermarkAdvancedFeature",
|
||||
"RunwareXAIProviderSettings",
|
||||
"txt2vid"
|
||||
],
|
||||
{
|
||||
"title_aux": "Runware.ai ComfyUI Inference API Integration"
|
||||
}
|
||||
],
|
||||
"https://github.com/RyanHolanda/ComfyUI-AudioBridge": [
|
||||
[
|
||||
"AudioToTensor",
|
||||
@ -25444,6 +25241,26 @@
|
||||
"title_aux": "ComfyUI-RotoMask"
|
||||
}
|
||||
],
|
||||
"https://github.com/TechnoWarrior2/comfyui-image-picker": [
|
||||
[
|
||||
"AlexImagePicker"
|
||||
],
|
||||
{
|
||||
"author": "alex",
|
||||
"description": "Pauses workflow and opens a new browser window to pick which images to pass through.",
|
||||
"nickname": "Image Picker",
|
||||
"title": "Alex Image Picker",
|
||||
"title_aux": "ComfyUI Image Picker"
|
||||
}
|
||||
],
|
||||
"https://github.com/TechnoWarrior2/comfyui-live-preview": [
|
||||
[
|
||||
"AlexLivePreview"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Live Preview"
|
||||
}
|
||||
],
|
||||
"https://github.com/TemryL/ComfyS3": [
|
||||
[
|
||||
"DownloadFileS3",
|
||||
@ -48485,7 +48302,8 @@
|
||||
],
|
||||
"https://github.com/jtydhr88/ComfyUI-qwenmultiangle": [
|
||||
[
|
||||
"QwenMultiangleCameraNode"
|
||||
"QwenMultiangleCameraNode",
|
||||
"QwenMultiangleCameraTranslateNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-qwenmultiangle"
|
||||
@ -64003,6 +63821,22 @@
|
||||
"title_aux": "comfyui-clippy-reloaded"
|
||||
}
|
||||
],
|
||||
"https://github.com/shootthesound/comfyui-image-of-the-day": [
|
||||
[
|
||||
"ImageOfDayLoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "Image of the Day"
|
||||
}
|
||||
],
|
||||
"https://github.com/shootthesound/comfyui-lora-FindingLora": [
|
||||
[
|
||||
"LoraLoaderFindingLora"
|
||||
],
|
||||
{
|
||||
"title_aux": "Finding LoRA"
|
||||
}
|
||||
],
|
||||
"https://github.com/shootthesound/comfyui-model-diff-to-lora": [
|
||||
[
|
||||
"ModelDiffToLoRA"
|
||||
@ -72296,6 +72130,19 @@
|
||||
"title_aux": "ComfyUI-KYNode"
|
||||
}
|
||||
],
|
||||
"https://github.com/younestft/Comfy_EverAnimate": [
|
||||
[
|
||||
"ComfyEverAnimate",
|
||||
"ComfyEverAnimateChunksCalculator",
|
||||
"ComfyEverAnimateColorCorrection",
|
||||
"ComfyEverAnimateContinueChunk",
|
||||
"ComfyEverAnimateInitialChunk",
|
||||
"ComfyEverAnimateMasterSettings"
|
||||
],
|
||||
{
|
||||
"title_aux": "Comfy EverAnimate"
|
||||
}
|
||||
],
|
||||
"https://github.com/younger15/ComfyUI-IterSwitch": [
|
||||
[
|
||||
"Iter_CLIPSwitch",
|
||||
|
||||
7156
github-stats.json
7156
github-stats.json
File diff suppressed because it is too large
Load Diff
@ -2,10 +2,12 @@ import asyncio
|
||||
import json
|
||||
import os
|
||||
import platform
|
||||
import time
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import List
|
||||
from urllib.parse import urlencode
|
||||
|
||||
import logging
|
||||
import manager_core
|
||||
import manager_util
|
||||
import requests
|
||||
@ -17,108 +19,242 @@ base_url = "https://api.comfy.org"
|
||||
lock = asyncio.Lock()
|
||||
|
||||
is_cache_loading = False
|
||||
force_refresh_days = 30
|
||||
|
||||
async def get_cnr_data(cache_mode=True, dont_wait=True):
|
||||
async def get_cnr_data(sync_mode=None, dont_wait=True, **kwargs):
|
||||
# For backwards compatibility with keyword argument cache_mode
|
||||
if sync_mode is None:
|
||||
sync_mode = kwargs.get('cache_mode', 'cache')
|
||||
try:
|
||||
return await _get_cnr_data(cache_mode, dont_wait)
|
||||
return await _get_cnr_data(sync_mode, dont_wait)
|
||||
except asyncio.TimeoutError:
|
||||
print("A timeout occurred during the fetch process from ComfyRegistry.")
|
||||
return await _get_cnr_data(cache_mode=True, dont_wait=True) # timeout fallback
|
||||
logging.error(f"[ComfyUI-Manager] A timeout occurred during the fetch process from ComfyRegistry.")
|
||||
return await _get_cnr_data(sync_mode='local', dont_wait=True) # timeout fallback
|
||||
|
||||
async def _get_cnr_data(cache_mode=True, dont_wait=True):
|
||||
def get_comfyui_ver():
|
||||
is_desktop = bool(os.environ.get('__COMFYUI_DESKTOP_VERSION__'))
|
||||
if is_desktop:
|
||||
return manager_core.get_current_comfyui_ver() or 'unknown'
|
||||
else:
|
||||
return manager_core.get_comfyui_tag() or 'unknown'
|
||||
|
||||
|
||||
def get_form_factor():
|
||||
is_desktop = bool(os.environ.get('__COMFYUI_DESKTOP_VERSION__'))
|
||||
system = platform.system().lower()
|
||||
is_windows = system == 'windows'
|
||||
is_mac = system == 'darwin'
|
||||
is_linux = system == 'linux'
|
||||
|
||||
if is_desktop:
|
||||
if is_windows:
|
||||
return 'desktop-win'
|
||||
elif is_mac:
|
||||
return 'desktop-mac'
|
||||
else:
|
||||
return 'other'
|
||||
else:
|
||||
if is_windows:
|
||||
return 'git-windows'
|
||||
elif is_mac:
|
||||
return 'git-mac'
|
||||
elif is_linux:
|
||||
return 'git-linux'
|
||||
else:
|
||||
return 'other'
|
||||
|
||||
|
||||
def get_node_timestamp(node):
|
||||
latest_ver = node.get('latest_version')
|
||||
if isinstance(latest_ver, dict):
|
||||
t = latest_ver.get('createdAt')
|
||||
if t:
|
||||
return t
|
||||
return node.get('created_at')
|
||||
|
||||
|
||||
async def _get_cnr_data(sync_mode=None, dont_wait=True, **kwargs):
|
||||
global is_cache_loading
|
||||
|
||||
uri = f'{base_url}/nodes'
|
||||
# For backwards compatibility with keyword argument cache_mode
|
||||
if sync_mode is None:
|
||||
sync_mode = kwargs.get('cache_mode', 'cache')
|
||||
|
||||
async def fetch_all():
|
||||
# Normalize sync_mode for backwards compatibility
|
||||
if sync_mode is True or sync_mode == 'cache' or sync_mode == 'local':
|
||||
normalized_mode = 'cache'
|
||||
elif sync_mode == 'force':
|
||||
normalized_mode = 'force'
|
||||
else:
|
||||
normalized_mode = 'remote'
|
||||
|
||||
uri = f'{base_url}/nodes'
|
||||
cache_path = manager_util.get_cache_path(uri)
|
||||
|
||||
comfyui_ver = get_comfyui_ver()
|
||||
form_factor = get_form_factor()
|
||||
|
||||
cached_data = None
|
||||
last_updated = None
|
||||
full_nodes = {}
|
||||
is_cache_expired = True
|
||||
cache_built_at = None
|
||||
cache_created_at = None
|
||||
|
||||
# Load local cache
|
||||
if normalized_mode != 'force' and manager_util.get_cache_state(uri, expired_days=None) == 'cached':
|
||||
try:
|
||||
with open(cache_path, 'r', encoding="UTF-8", errors="ignore") as json_file:
|
||||
cached_data = json.load(json_file)
|
||||
|
||||
# Check `force_refresh_days` cache database expiration for a full refresh sync
|
||||
is_db_expired = True
|
||||
cache_created_at = cached_data.get('cache_created_at')
|
||||
if cache_created_at:
|
||||
try:
|
||||
created_dt = datetime.fromisoformat(cache_created_at.replace('Z', '+00:00'))
|
||||
current_dt = datetime.now(timezone.utc)
|
||||
delta_created = current_dt - created_dt
|
||||
if timedelta(seconds=0) <= delta_created and delta_created < timedelta(days=force_refresh_days):
|
||||
is_db_expired = False
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if not is_db_expired and (cached_data.get('comfyui_ver') == comfyui_ver and
|
||||
cached_data.get('form_factor') == form_factor):
|
||||
last_updated = cached_data.get('last_updated')
|
||||
for node in cached_data.get('nodes', []):
|
||||
full_nodes[node['id']] = node
|
||||
else:
|
||||
logging.info(f"[ComfyUI-Manager] Registry cache DB expired ({force_refresh_days} days) or environment changed. Invalidating local cache.")
|
||||
cached_data = None
|
||||
full_nodes = {}
|
||||
last_updated = None
|
||||
cache_created_at = None
|
||||
except Exception as e:
|
||||
logging.error(f"[ComfyUI-Manager] Failed to read cached data: {e}")
|
||||
cached_data = None
|
||||
full_nodes = {}
|
||||
last_updated = None
|
||||
|
||||
# Separate cache expiration check (1-day period)
|
||||
# It just determines cache is expired, not cache is exist.
|
||||
if cached_data is not None:
|
||||
cache_built_at = cached_data.get('cache_built_at')
|
||||
if cache_built_at:
|
||||
try:
|
||||
built_dt = datetime.fromisoformat(cache_built_at.replace('Z', '+00:00'))
|
||||
current_dt = datetime.now(timezone.utc)
|
||||
delta_dt = current_dt - built_dt
|
||||
if timedelta(seconds=0) <= delta_dt and delta_dt < timedelta(days=1):
|
||||
is_cache_expired = False
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Return Cached data when mode is 'cache'
|
||||
if normalized_mode == 'cache':
|
||||
is_cache_loading = True
|
||||
|
||||
if dont_wait and cached_data is not None:
|
||||
is_cache_loading = False
|
||||
return cached_data.get('nodes', [])
|
||||
|
||||
if cached_data is not None and (sync_mode == 'local' or not is_cache_expired):
|
||||
is_cache_loading = False
|
||||
return cached_data.get('nodes', [])
|
||||
|
||||
if sync_mode == 'local':
|
||||
is_cache_loading = False
|
||||
return []
|
||||
|
||||
# Fetch CNR
|
||||
async def fetch_all(timestamp_filter, existing_nodes):
|
||||
remained = True
|
||||
page = 1
|
||||
nodes_map = dict(existing_nodes)
|
||||
|
||||
full_nodes = {}
|
||||
|
||||
|
||||
# Determine form factor based on environment and platform
|
||||
is_desktop = bool(os.environ.get('__COMFYUI_DESKTOP_VERSION__'))
|
||||
system = platform.system().lower()
|
||||
is_windows = system == 'windows'
|
||||
is_mac = system == 'darwin'
|
||||
is_linux = system == 'linux'
|
||||
|
||||
# Get ComfyUI version tag
|
||||
if is_desktop:
|
||||
# extract version from pyproject.toml instead of git tag
|
||||
comfyui_ver = manager_core.get_current_comfyui_ver() or 'unknown'
|
||||
else:
|
||||
comfyui_ver = manager_core.get_comfyui_tag() or 'unknown'
|
||||
|
||||
if is_desktop:
|
||||
if is_windows:
|
||||
form_factor = 'desktop-win'
|
||||
elif is_mac:
|
||||
form_factor = 'desktop-mac'
|
||||
else:
|
||||
form_factor = 'other'
|
||||
else:
|
||||
if is_windows:
|
||||
form_factor = 'git-windows'
|
||||
elif is_mac:
|
||||
form_factor = 'git-mac'
|
||||
elif is_linux:
|
||||
form_factor = 'git-linux'
|
||||
else:
|
||||
form_factor = 'other'
|
||||
|
||||
while remained:
|
||||
# Add comfyui_version and form_factor to the API request
|
||||
sub_uri = f'{base_url}/nodes?page={page}&limit=30&comfyui_version={comfyui_ver}&form_factor={form_factor}'
|
||||
sub_json_obj = await asyncio.wait_for(manager_util.get_data_with_cache(sub_uri, cache_mode=False, silent=True, dont_cache=True), timeout=30)
|
||||
params = {
|
||||
'page': page,
|
||||
'limit': 30,
|
||||
'comfyui_version': comfyui_ver,
|
||||
'form_factor': form_factor,
|
||||
}
|
||||
if timestamp_filter:
|
||||
params['timestamp'] = timestamp_filter
|
||||
sub_uri = f'{base_url}/nodes?{urlencode(params)}'
|
||||
|
||||
sub_json_obj = await asyncio.wait_for(
|
||||
manager_util.get_data_with_cache(sub_uri, cache_mode=False, silent=True, dont_cache=True),
|
||||
timeout=30
|
||||
)
|
||||
remained = page < sub_json_obj['totalPages']
|
||||
|
||||
for x in sub_json_obj['nodes']:
|
||||
full_nodes[x['id']] = x
|
||||
nodes_map[x['id']] = x
|
||||
|
||||
if page % 5 == 0:
|
||||
print(f"FETCH ComfyRegistry Data: {page}/{sub_json_obj['totalPages']}")
|
||||
logging.info(f"[ComfyUI-Manager] FETCH ComfyRegistry Data: {page}/{sub_json_obj['totalPages']}")
|
||||
|
||||
page += 1
|
||||
time.sleep(0.5)
|
||||
await asyncio.sleep(0.5)
|
||||
|
||||
print("FETCH ComfyRegistry Data [DONE]")
|
||||
logging.info(f"[ComfyUI-Manager] FETCH ComfyRegistry Data [DONE]")
|
||||
|
||||
for v in full_nodes.values():
|
||||
for v in nodes_map.values():
|
||||
if 'latest_version' not in v:
|
||||
v['latest_version'] = dict(version='nightly')
|
||||
|
||||
return {'nodes': list(full_nodes.values())}
|
||||
|
||||
if cache_mode:
|
||||
is_cache_loading = True
|
||||
cache_state = manager_util.get_cache_state(uri)
|
||||
|
||||
if dont_wait:
|
||||
if cache_state == 'not-cached':
|
||||
return {}
|
||||
else:
|
||||
print("[ComfyUI-Manager] The ComfyRegistry cache update is still in progress, so an outdated cache is being used.")
|
||||
with open(manager_util.get_cache_path(uri), 'r', encoding="UTF-8", errors="ignore") as json_file:
|
||||
return json.load(json_file)['nodes']
|
||||
|
||||
if cache_state == 'cached':
|
||||
with open(manager_util.get_cache_path(uri), 'r', encoding="UTF-8", errors="ignore") as json_file:
|
||||
return json.load(json_file)['nodes']
|
||||
return {'nodes': list(nodes_map.values())}
|
||||
|
||||
try:
|
||||
json_obj = await fetch_all()
|
||||
manager_util.save_to_cache(uri, json_obj)
|
||||
return json_obj['nodes']
|
||||
except:
|
||||
res = {}
|
||||
print("Cannot connect to comfyregistry.")
|
||||
finally:
|
||||
if cache_mode:
|
||||
is_cache_loading = False
|
||||
json_obj = await fetch_all(last_updated, full_nodes)
|
||||
|
||||
return res
|
||||
# Set cache's timestamp as the maximum timestamp from fetched nodes.
|
||||
# This way, in the next run, only the latest updates will be fetched.
|
||||
timestamps = [get_node_timestamp(node) for node in json_obj['nodes'] if get_node_timestamp(node)]
|
||||
max_timestamp = max(timestamps) if timestamps else None
|
||||
|
||||
timestamp_format = "%Y-%m-%dT%H:%M:%SZ"
|
||||
|
||||
if max_timestamp:
|
||||
try:
|
||||
ts_str = max_timestamp.replace('Z', '+00:00')
|
||||
dt = datetime.fromisoformat(ts_str) - timedelta(seconds=10)
|
||||
new_timestamp = dt.strftime(timestamp_format)
|
||||
except Exception:
|
||||
new_timestamp = max_timestamp
|
||||
else:
|
||||
new_timestamp = last_updated
|
||||
|
||||
|
||||
new_cache_built_at = datetime.now(timezone.utc).strftime(timestamp_format)
|
||||
|
||||
if normalized_mode == 'force' or not cache_created_at:
|
||||
new_cache_created_at = datetime.now(timezone.utc).strftime(timestamp_format)
|
||||
else:
|
||||
new_cache_created_at = cache_created_at
|
||||
|
||||
cache_to_save = {
|
||||
'nodes': json_obj['nodes'],
|
||||
'comfyui_ver': comfyui_ver,
|
||||
'form_factor': form_factor,
|
||||
'last_updated': new_timestamp,
|
||||
'cache_built_at': new_cache_built_at,
|
||||
'cache_created_at': new_cache_created_at
|
||||
}
|
||||
manager_util.save_to_cache(uri, cache_to_save)
|
||||
return json_obj['nodes']
|
||||
except asyncio.TimeoutError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logging.error(f"[ComfyUI-Manager] Cannot connect to comfyregistry or failed sync: {e}")
|
||||
if cached_data is not None:
|
||||
return cached_data.get('nodes', [])
|
||||
return []
|
||||
finally:
|
||||
if normalized_mode == 'cache':
|
||||
is_cache_loading = False
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -237,7 +373,7 @@ def generate_cnr_id(fullpath, cnr_id):
|
||||
with open(cnr_id_path, "w") as f:
|
||||
return f.write(cnr_id)
|
||||
except:
|
||||
print(f"[ComfyUI Manager] unable to create file: {cnr_id_path}")
|
||||
logging.error(f"[ComfyUI-Manager] unable to create file: {cnr_id_path}")
|
||||
|
||||
|
||||
def read_cnr_id(fullpath):
|
||||
|
||||
@ -811,7 +811,7 @@ class UnifiedManager:
|
||||
dont_wait = True
|
||||
|
||||
# reload 'cnr_map' and 'repo_cnr_map'
|
||||
cnrs = await cnr_utils.get_cnr_data(cache_mode=cache_mode=='cache', dont_wait=dont_wait)
|
||||
cnrs = await cnr_utils.get_cnr_data(sync_mode=cache_mode, dont_wait=dont_wait)
|
||||
|
||||
for x in cnrs:
|
||||
self.cnr_map[x['id']] = x
|
||||
|
||||
@ -166,8 +166,10 @@ def simple_hash(input_string):
|
||||
|
||||
return hash_value
|
||||
|
||||
def is_file_created_within_days(file_path, days):
|
||||
if days is None:
|
||||
return True
|
||||
|
||||
def is_file_created_within_one_day(file_path):
|
||||
if not os.path.exists(file_path):
|
||||
return False
|
||||
|
||||
@ -175,8 +177,10 @@ def is_file_created_within_one_day(file_path):
|
||||
current_time = datetime.now().timestamp()
|
||||
time_difference = current_time - file_creation_time
|
||||
|
||||
return time_difference <= 86400
|
||||
return time_difference <= (days * 86400)
|
||||
|
||||
def is_file_created_within_one_day(file_path):
|
||||
return is_file_created_within_days(file_path, 1)
|
||||
|
||||
async def get_data(uri, silent=False):
|
||||
if not silent:
|
||||
@ -214,12 +218,12 @@ def get_cache_path(uri):
|
||||
return os.path.join(cache_dir, cache_uri+'.json')
|
||||
|
||||
|
||||
def get_cache_state(uri):
|
||||
def get_cache_state(uri, expired_days=1):
|
||||
cache_uri = get_cache_path(uri)
|
||||
|
||||
if not os.path.exists(cache_uri):
|
||||
return "not-cached"
|
||||
elif is_file_created_within_one_day(cache_uri):
|
||||
elif is_file_created_within_days(cache_uri, expired_days):
|
||||
return "cached"
|
||||
|
||||
return "expired"
|
||||
|
||||
@ -4970,9 +4970,13 @@
|
||||
"SV-ClearCustomCaches",
|
||||
"SV-CompressConds",
|
||||
"SV-CondDiffSharpening",
|
||||
"SV-ConditioningArithmetic",
|
||||
"SV-ConditioningInterferenceSchedule",
|
||||
"SV-ConditioningMaskMerge",
|
||||
"SV-ConditioningNoiseNudge",
|
||||
"SV-ConditioningReroute",
|
||||
"SV-ConditioningScaleJitter",
|
||||
"SV-ConditioningScheduledBlend",
|
||||
"SV-ConditioningTokenDropoutNudge",
|
||||
"SV-ConsolePrint",
|
||||
"SV-ConsolePrintLoop",
|
||||
@ -5013,16 +5017,15 @@
|
||||
"SV-HashModel",
|
||||
"SV-HashObject",
|
||||
"SV-IfBranch",
|
||||
"SV-ImageInt",
|
||||
"SV-ImageReroute",
|
||||
"SV-InputSelect",
|
||||
"SV-InputSelectBoolean",
|
||||
"SV-InputSelectCompare",
|
||||
"SV-IntMathOperation",
|
||||
"SV-Krea2LocalStyleReferenceOld",
|
||||
"SV-Krea2Reference",
|
||||
"SV-Krea2ReferenceAdvanced",
|
||||
"SV-Krea2ReferencePlus",
|
||||
"SV-Krea2ResizeImage",
|
||||
"SV-LLMArgs",
|
||||
"SV-LLMRequest",
|
||||
"SV-ListToAccumulationNode",
|
||||
@ -5044,6 +5047,7 @@
|
||||
"SV-PrecisionFloat",
|
||||
"SV-PrimitiveFloat",
|
||||
"SV-PrimitiveNone",
|
||||
"SV-PromptGeneratorAPI",
|
||||
"SV-PromptPlusModel",
|
||||
"SV-PromptPlusModelOutput",
|
||||
"SV-PromptProcessing",
|
||||
@ -5056,11 +5060,14 @@
|
||||
"SV-PromptProcessingSimple",
|
||||
"SV-PromptProcessingVars",
|
||||
"SV-RandomImage",
|
||||
"SV-RegexMatch",
|
||||
"SV-RegexReplace",
|
||||
"SV-ResizeImage",
|
||||
"SV-ResolutionSelector",
|
||||
"SV-ResolutionSelector2",
|
||||
"SV-ResolutionSelector2Output",
|
||||
"SV-SamplerNameToSampler",
|
||||
"SV-SaveImageCustom",
|
||||
"SV-SaveTextFile",
|
||||
"SV-ScaleConditioning",
|
||||
"SV-SigmaAsFloat",
|
||||
@ -5077,6 +5084,7 @@
|
||||
"SV-SigmaReverse",
|
||||
"SV-SigmaStartEnd",
|
||||
"SV-SigmaStrength",
|
||||
"SV-SimpleString",
|
||||
"SV-SimpleText",
|
||||
"SV-SkimmedCFGDifference",
|
||||
"SV-SkimmedCFGDual",
|
||||
@ -5096,7 +5104,8 @@
|
||||
"SV-WhileLoopOpen",
|
||||
"SV-WildcardLoader",
|
||||
"SV-WildcardProcessing",
|
||||
"SV-WildcardString"
|
||||
"SV-WildcardString",
|
||||
"SV-WorkflowAgent"
|
||||
],
|
||||
{
|
||||
"title_aux": "SirVeggie/Custom nodes for ComfyUI"
|
||||
|
||||
@ -752,7 +752,6 @@
|
||||
"GrsaiFluxKontext_MultiImageToImage",
|
||||
"GrsaiFluxKontext_TextToImage",
|
||||
"Grsai_GPTImage",
|
||||
"Grsai_GPTImageVIP",
|
||||
"Grsai_NanoBanana",
|
||||
"Grsai_NanoBanana2",
|
||||
"Grsai_NanoBananaPro"
|
||||
@ -3988,6 +3987,9 @@
|
||||
{
|
||||
"author": "Azornes",
|
||||
"description": "Logging Configuration",
|
||||
"preemptions": [
|
||||
"ResolutionMaster"
|
||||
],
|
||||
"title": "AzLogs",
|
||||
"title_aux": "Comfyui-Resolution-Master"
|
||||
}
|
||||
@ -17719,6 +17721,18 @@
|
||||
"title_aux": "ComfyUI-Montagen"
|
||||
}
|
||||
],
|
||||
"https://github.com/Moon-NE/MoonNe_Nodes": [
|
||||
[
|
||||
"BatchConditionalText",
|
||||
"BatchConditionalTextWeight",
|
||||
"Moon_NE_Text_Concatenate",
|
||||
"TextHorizontalToVertical",
|
||||
"batch_randoml_text"
|
||||
],
|
||||
{
|
||||
"title_aux": "MoonNe_Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/MoonHugo/ComfyUI-BAGEL-Hugo": [
|
||||
[
|
||||
"BagelByHugo"
|
||||
@ -20976,223 +20990,6 @@
|
||||
"title_aux": "ComfyUI-PromptUtils"
|
||||
}
|
||||
],
|
||||
"https://github.com/Runware/ComfyUI-Runware": [
|
||||
[
|
||||
"Runware 3D Inference",
|
||||
"Runware 3D Inference Inputs",
|
||||
"Runware 3D Inference Settings",
|
||||
"Runware 3D Inference Settings Draco Compression",
|
||||
"Runware 3D Inference Settings Mesh Cluster",
|
||||
"Runware 3D Inference Settings Shape Slat",
|
||||
"Runware 3D Inference Settings Sparse Structure",
|
||||
"Runware 3D Inference Settings Tex Slat",
|
||||
"Runware 3D Model Search",
|
||||
"Runware API Manager",
|
||||
"Runware Accelerator Options",
|
||||
"Runware Alibaba Provider Settings",
|
||||
"Runware Audio Inference",
|
||||
"Runware Audio Inference Inputs",
|
||||
"Runware Audio Inference Inputs Reference Audio",
|
||||
"Runware Audio Inference Settings",
|
||||
"Runware Audio Inference Settings Voice Modify",
|
||||
"Runware Audio Inference Speech",
|
||||
"Runware Audio Inference Speech Voices",
|
||||
"Runware Audio Model Search",
|
||||
"Runware Audio Sections",
|
||||
"Runware Background Removal",
|
||||
"Runware BlackForest Labs Provider Settings",
|
||||
"Runware Bria Provider Mask",
|
||||
"Runware Bria Provider Settings",
|
||||
"Runware Bytedance Provider Settings",
|
||||
"Runware ControlNet",
|
||||
"Runware ControlNet Combine",
|
||||
"Runware ControlNet PreProcessor",
|
||||
"Runware ElevenLabs Provider Settings",
|
||||
"Runware ElevenLabs Provider Settings Sections",
|
||||
"Runware Embedding Search",
|
||||
"Runware Embeddings Combine",
|
||||
"Runware Frame Images",
|
||||
"Runware Google Provider Settings",
|
||||
"Runware IPAdapter",
|
||||
"Runware IPAdapters Combine",
|
||||
"Runware Image Advanced Feature Input",
|
||||
"Runware Image Caption",
|
||||
"Runware Image Inference",
|
||||
"Runware Image Inference Inputs",
|
||||
"Runware Image Inference Inputs Fonts",
|
||||
"Runware Image Inference Settings Color Palette",
|
||||
"Runware Image Inference Settings Moodboards",
|
||||
"Runware Image Inference Settings Prompt Enhance",
|
||||
"Runware Image Inference Settings Scoring Rubric",
|
||||
"Runware Image Inference Settings Scoring Rubric Combine",
|
||||
"Runware Image Inference Settings Structured Prompt",
|
||||
"Runware Image Inference Ultralytics",
|
||||
"Runware Image Masking",
|
||||
"Runware Image Upscaler",
|
||||
"Runware Image Upscaler Settings",
|
||||
"Runware Imagen Inference",
|
||||
"Runware Input Audios",
|
||||
"Runware Kling MultiPrompt Segment",
|
||||
"Runware Kling Provider Settings MultiPrompt",
|
||||
"Runware KlingAI Provider Settings",
|
||||
"Runware Kontext Inference",
|
||||
"Runware Lightricks Provider Settings",
|
||||
"Runware Load Mesh",
|
||||
"Runware Lora Combine",
|
||||
"Runware Lora Search",
|
||||
"Runware Luma Provider Settings",
|
||||
"Runware Media Upload",
|
||||
"Runware Midjourney Provider Settings",
|
||||
"Runware MiniMax Provider Settings",
|
||||
"Runware Mirelo Provider Settings",
|
||||
"Runware Model Search",
|
||||
"Runware Multi Inference",
|
||||
"Runware OpenAI Provider Settings",
|
||||
"Runware Outpaint",
|
||||
"Runware PhotoMaker V2",
|
||||
"Runware Pixverse Provider Settings",
|
||||
"Runware Provider Settings Recraft Color",
|
||||
"Runware Recraft Provider Settings",
|
||||
"Runware Reference Audios",
|
||||
"Runware Reference Images",
|
||||
"Runware Reference Videos",
|
||||
"Runware Reference Voices",
|
||||
"Runware Refiner",
|
||||
"Runware Regional Prompting Advanced Feature",
|
||||
"Runware Regional Prompting Advanced Feature Regions",
|
||||
"Runware Runway Provider Settings",
|
||||
"Runware Safety Inputs",
|
||||
"Runware Save 3D",
|
||||
"Runware Save Image",
|
||||
"Runware Save Text",
|
||||
"Runware Settings",
|
||||
"Runware Sourceful Provider Settings",
|
||||
"Runware Sourceful Provider Settings Fonts",
|
||||
"Runware Speech Inputs Combine",
|
||||
"Runware Sync Provider Settings",
|
||||
"Runware Sync Segment",
|
||||
"Runware Text Inference",
|
||||
"Runware Text Inference Inputs",
|
||||
"Runware Text Inference Inputs Images",
|
||||
"Runware Text Inference Inputs Videos",
|
||||
"Runware Text Inference Message",
|
||||
"Runware Text Inference Messages",
|
||||
"Runware Text Inference Settings",
|
||||
"Runware Text Inference Settings Cache",
|
||||
"Runware Text Inference Tool Choice",
|
||||
"Runware Text Model Search",
|
||||
"Runware VAE Search",
|
||||
"Runware Vectorize",
|
||||
"Runware Video Advanced Feature Inputs",
|
||||
"Runware Video Audio Input",
|
||||
"Runware Video Background Removal",
|
||||
"Runware Video Inference",
|
||||
"Runware Video Inference Elements",
|
||||
"Runware Video Inference Elements Combine",
|
||||
"Runware Video Inference Inputs",
|
||||
"Runware Video Inference Inputs Reference Audios",
|
||||
"Runware Video Inference Inputs Reference Images",
|
||||
"Runware Video Inference Inputs Reference Images Multiple Images Connector",
|
||||
"Runware Video Inference Inputs Reference Videos",
|
||||
"Runware Video Inference Inputs Reference Voices",
|
||||
"Runware Video Inference Lora",
|
||||
"Runware Video Inference Outputs",
|
||||
"Runware Video Inference Settings",
|
||||
"Runware Video Inference Settings Active Speaker Bounding Boxes",
|
||||
"Runware Video Inference Settings Active Speaker Detection",
|
||||
"Runware Video Inference Settings Edit",
|
||||
"Runware Video Inference Settings Segments",
|
||||
"Runware Video Inference Settings Source Position",
|
||||
"Runware Video Inference Settings TTS",
|
||||
"Runware Video Inference Speech Input",
|
||||
"Runware Video Inputs Frame Images",
|
||||
"Runware Video Inputs References",
|
||||
"Runware Video Model Search",
|
||||
"Runware Video Speech Input",
|
||||
"Runware Video Transcription",
|
||||
"Runware Video Upscaler",
|
||||
"Runware Vidu Provider Settings",
|
||||
"Runware Wan Animate Advanced Feature Settings",
|
||||
"Runware Watermark Advanced Feature",
|
||||
"Runware xAI Provider Settings",
|
||||
"Runware3DInference",
|
||||
"Runware3DInferenceInputs",
|
||||
"Runware3DInferenceSettings",
|
||||
"Runware3DInferenceSettingsDracoCompression",
|
||||
"Runware3DInferenceSettingsMeshCluster",
|
||||
"Runware3DInferenceSettingsShapeSlat",
|
||||
"Runware3DInferenceSettingsSparseStructure",
|
||||
"Runware3DInferenceSettingsTexSlat",
|
||||
"RunwareAlibabaProviderSettings",
|
||||
"RunwareAudioInferenceInputs",
|
||||
"RunwareAudioInferenceReferenceVoices",
|
||||
"RunwareAudioInferenceSpeech",
|
||||
"RunwareAudioInferenceSpeechVoices",
|
||||
"RunwareAudioInput",
|
||||
"RunwareAudioSettings",
|
||||
"RunwareAudioSettingsVoiceModify",
|
||||
"RunwareBlackForestProviderSettings",
|
||||
"RunwareBriaProviderMask",
|
||||
"RunwareBriaProviderSettings",
|
||||
"RunwareBytedanceProviderSettings",
|
||||
"RunwareFrameImages",
|
||||
"RunwareGoogleProviderSettings",
|
||||
"RunwareImageInferenceAdvancedFeatures",
|
||||
"RunwareImageInferenceSettingsPromptEnhance",
|
||||
"RunwareImageInferenceSettingsStructuredPrompt",
|
||||
"RunwareKlingMultiPromptSegment",
|
||||
"RunwareKlingProviderSettings",
|
||||
"RunwareKlingProviderSettingsMultiPrompt",
|
||||
"RunwareLightricksProviderSettings",
|
||||
"RunwareLoadMesh",
|
||||
"RunwareLumaProviderSettings",
|
||||
"RunwareMidjourneyProviderSettings",
|
||||
"RunwareMiniMaxProviderSettings",
|
||||
"RunwareMireloProviderSettings",
|
||||
"RunwareOpenAIProviderSettings",
|
||||
"RunwarePixverseProviderSettings",
|
||||
"RunwareRecraftColor",
|
||||
"RunwareRecraftProviderSettings",
|
||||
"RunwareRegionalPromptingAdvancedFeature",
|
||||
"RunwareRegionalPromptingAdvancedFeatureRegions",
|
||||
"RunwareRunwayProviderSettings",
|
||||
"RunwareSafetyInputs",
|
||||
"RunwareSave3D",
|
||||
"RunwareSourcefulProviderSettings",
|
||||
"RunwareSourcefulProviderSettingsFonts",
|
||||
"RunwareSpeechInput",
|
||||
"RunwareSpeechInputCombine",
|
||||
"RunwareSyncProviderSettings",
|
||||
"RunwareSyncSegment",
|
||||
"RunwareTextInferenceSettingsCache",
|
||||
"RunwareTextInferenceToolChoice",
|
||||
"RunwareUltralyticsInputs",
|
||||
"RunwareUltralyticsProviderSettings",
|
||||
"RunwareVectorize",
|
||||
"RunwareVideoAdvancedFeatureInputs",
|
||||
"RunwareVideoBgRemoval",
|
||||
"RunwareVideoInferenceOutputs",
|
||||
"RunwareVideoInferenceSettingsActiveSpeakerBoundingBoxes",
|
||||
"RunwareVideoInferenceSettingsActiveSpeakerDetection",
|
||||
"RunwareVideoInferenceSettingsControl",
|
||||
"RunwareVideoInferenceSettingsSegments",
|
||||
"RunwareVideoInferenceSettingsSourcePosition",
|
||||
"RunwareVideoInferenceSettingsTts",
|
||||
"RunwareVideoInferenceSpeechInput",
|
||||
"RunwareVideoInputsFrameImages",
|
||||
"RunwareVideoInputsReferenceImagesMultipleImagesConnector",
|
||||
"RunwareVideoInputsReferences",
|
||||
"RunwareVideoSettings",
|
||||
"RunwareVideoUpscaler",
|
||||
"RunwareWanAnimateAdvancedFeatureSettings",
|
||||
"RunwareWatermarkAdvancedFeature",
|
||||
"RunwareXAIProviderSettings",
|
||||
"txt2vid"
|
||||
],
|
||||
{
|
||||
"title_aux": "Runware.ai ComfyUI Inference API Integration"
|
||||
}
|
||||
],
|
||||
"https://github.com/RyanHolanda/ComfyUI-AudioBridge": [
|
||||
[
|
||||
"AudioToTensor",
|
||||
@ -25444,6 +25241,26 @@
|
||||
"title_aux": "ComfyUI-RotoMask"
|
||||
}
|
||||
],
|
||||
"https://github.com/TechnoWarrior2/comfyui-image-picker": [
|
||||
[
|
||||
"AlexImagePicker"
|
||||
],
|
||||
{
|
||||
"author": "alex",
|
||||
"description": "Pauses workflow and opens a new browser window to pick which images to pass through.",
|
||||
"nickname": "Image Picker",
|
||||
"title": "Alex Image Picker",
|
||||
"title_aux": "ComfyUI Image Picker"
|
||||
}
|
||||
],
|
||||
"https://github.com/TechnoWarrior2/comfyui-live-preview": [
|
||||
[
|
||||
"AlexLivePreview"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Live Preview"
|
||||
}
|
||||
],
|
||||
"https://github.com/TemryL/ComfyS3": [
|
||||
[
|
||||
"DownloadFileS3",
|
||||
@ -48485,7 +48302,8 @@
|
||||
],
|
||||
"https://github.com/jtydhr88/ComfyUI-qwenmultiangle": [
|
||||
[
|
||||
"QwenMultiangleCameraNode"
|
||||
"QwenMultiangleCameraNode",
|
||||
"QwenMultiangleCameraTranslateNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-qwenmultiangle"
|
||||
@ -64003,6 +63821,22 @@
|
||||
"title_aux": "comfyui-clippy-reloaded"
|
||||
}
|
||||
],
|
||||
"https://github.com/shootthesound/comfyui-image-of-the-day": [
|
||||
[
|
||||
"ImageOfDayLoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "Image of the Day"
|
||||
}
|
||||
],
|
||||
"https://github.com/shootthesound/comfyui-lora-FindingLora": [
|
||||
[
|
||||
"LoraLoaderFindingLora"
|
||||
],
|
||||
{
|
||||
"title_aux": "Finding LoRA"
|
||||
}
|
||||
],
|
||||
"https://github.com/shootthesound/comfyui-model-diff-to-lora": [
|
||||
[
|
||||
"ModelDiffToLoRA"
|
||||
@ -72296,6 +72130,19 @@
|
||||
"title_aux": "ComfyUI-KYNode"
|
||||
}
|
||||
],
|
||||
"https://github.com/younestft/Comfy_EverAnimate": [
|
||||
[
|
||||
"ComfyEverAnimate",
|
||||
"ComfyEverAnimateChunksCalculator",
|
||||
"ComfyEverAnimateColorCorrection",
|
||||
"ComfyEverAnimateContinueChunk",
|
||||
"ComfyEverAnimateInitialChunk",
|
||||
"ComfyEverAnimateMasterSettings"
|
||||
],
|
||||
{
|
||||
"title_aux": "Comfy EverAnimate"
|
||||
}
|
||||
],
|
||||
"https://github.com/younger15/ComfyUI-IterSwitch": [
|
||||
[
|
||||
"Iter_CLIPSwitch",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user