Compare commits
157 Commits
draft-v4-s
...
draft-v4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7799964de | ||
|
|
5378f0a8e9 | ||
|
|
e13bf68775 | ||
|
|
d970fe68ea | ||
|
|
63ba5fed09 | ||
|
|
98a8464933 | ||
|
|
7e3e6726e0 | ||
|
|
09567b2bb2 | ||
|
|
f3bd116184 | ||
|
|
7509737563 | ||
|
|
cfb815d879 | ||
|
|
44241fb967 | ||
|
|
c4b45129bd | ||
|
|
70741008ca | ||
|
|
6c2d2cae2a | ||
|
|
28f13d3311 | ||
|
|
4e31aaa8fb | ||
|
|
ba99f0c2cc | ||
|
|
e0a96b4937 | ||
|
|
82c055f527 | ||
|
|
f94008192c | ||
|
|
3895d5279e | ||
|
|
41be94690f | ||
|
|
3d85ecc525 | ||
|
|
7da00796e5 | ||
|
|
6086419cb6 | ||
|
|
5bc1f2f2c0 | ||
|
|
32a83b211e | ||
|
|
bead7b3a7f | ||
|
|
815d6d6572 | ||
|
|
fbecbee4c3 | ||
|
|
b9a7d2a78c | ||
|
|
95ce812992 | ||
|
|
9a36f4748c | ||
|
|
50b7849a35 | ||
|
|
6f1245b27c | ||
|
|
cc87ed3899 | ||
|
|
1d9037fefe | ||
|
|
03016e2d16 | ||
|
|
bdfb70a58a | ||
|
|
3d41617f4e | ||
|
|
35151ffdd1 | ||
|
|
4527d41a7a | ||
|
|
553cba12f3 | ||
|
|
00fb9c88e1 | ||
|
|
116e068ac3 | ||
|
|
1010dd2d28 | ||
|
|
68bc8302fd | ||
|
|
596dad5cda | ||
|
|
a924c280fb | ||
|
|
7354242906 | ||
|
|
3d0bcf5979 | ||
|
|
e7d0b158e9 | ||
|
|
10ff90787c | ||
|
|
330c4657b1 | ||
|
|
72a109f109 | ||
|
|
cf45c51dfb | ||
|
|
0b013adb34 | ||
|
|
7457d91f64 | ||
|
|
7fe1159426 | ||
|
|
c2665e3677 | ||
|
|
d63de803a4 | ||
|
|
11aca3513c | ||
|
|
561c9f40e5 | ||
|
|
54ed13aadf | ||
|
|
109cc21337 | ||
|
|
7e46b30fa5 | ||
|
|
0ba112c2c7 | ||
|
|
fc15d94170 | ||
|
|
dcb37d9c55 | ||
|
|
755b9d6342 | ||
|
|
3d6151c94f | ||
|
|
590bd8c4b9 | ||
|
|
e99aafd876 | ||
|
|
1f0adf8bcf | ||
|
|
dbd5d5fb43 | ||
|
|
a8b0e3641b | ||
|
|
9efb350be9 | ||
|
|
8d9820b3fb | ||
|
|
103f89551a | ||
|
|
6030d961ad | ||
|
|
ee08c9e17f | ||
|
|
48dd9a3240 | ||
|
|
e122e206a6 | ||
|
|
398b905758 | ||
|
|
dc2ec08fe3 | ||
|
|
3bf5edf5c9 | ||
|
|
134bca526c | ||
|
|
3393e58b06 | ||
|
|
648d7e73c6 | ||
|
|
eab6cdeee4 | ||
|
|
e8ec1ce8e3 | ||
|
|
b3581564ed | ||
|
|
29e1bd95fd | ||
|
|
8bff401c14 | ||
|
|
41798e9255 | ||
|
|
9e4f0228d1 | ||
|
|
76ee93c98c | ||
|
|
fb1a89efb7 | ||
|
|
aface43554 | ||
|
|
a35f0157b2 | ||
|
|
9b32162906 | ||
|
|
21bba62572 | ||
|
|
302327d6b3 | ||
|
|
5667e8bcbb | ||
|
|
ae66bd0e31 | ||
|
|
48dfadc02d | ||
|
|
3df6272bb6 | ||
|
|
e7f9bcda01 | ||
|
|
205044ca66 | ||
|
|
d497eb1f00 | ||
|
|
4e6f970ee9 | ||
|
|
0b6cdda6f5 | ||
|
|
a896ded763 | ||
|
|
fb5dd9ebc2 | ||
|
|
c8b7db6c38 | ||
|
|
44a3191be3 | ||
|
|
b4f7cdc9e7 | ||
|
|
8da07018d5 | ||
|
|
0c19a27065 | ||
|
|
3296b0ecdf | ||
|
|
0a07261124 | ||
|
|
33106d0ecf | ||
|
|
5bb887206a | ||
|
|
b30b0e27cb | ||
|
|
363736489c | ||
|
|
8dbf5e87a0 | ||
|
|
0b30f2cb50 | ||
|
|
ba5265dac4 | ||
|
|
ecb9c65917 | ||
|
|
8a98474600 | ||
|
|
b072216e67 | ||
|
|
cfb3181716 | ||
|
|
ab684cdc99 | ||
|
|
facadc3a44 | ||
|
|
f599bc22d7 | ||
|
|
281319d2da | ||
|
|
5cb203685c | ||
|
|
300c6e7406 | ||
|
|
9c4d6a0773 | ||
|
|
01fa37900b | ||
|
|
edbe744e17 | ||
|
|
2a32a1a4a8 | ||
|
|
404bdb21e6 | ||
|
|
b260c9a512 | ||
|
|
4b941adb6a | ||
|
|
bd752550a8 | ||
|
|
b8b71bb961 | ||
|
|
5aaf7a4092 | ||
|
|
030e02ffb8 | ||
|
|
60746c6253 | ||
|
|
d962aa03f4 | ||
|
|
121a5a1888 | ||
|
|
9e4a2aae43 | ||
|
|
ee6eb685e7 | ||
|
|
09a38a32ce | ||
|
|
d13b19d43d |
30
.github/workflows/publish-to-pypi.yml
vendored
30
.github/workflows/publish-to-pypi.yml
vendored
@@ -4,7 +4,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- draft-v4
|
||||||
paths:
|
paths:
|
||||||
- "pyproject.toml"
|
- "pyproject.toml"
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: '3.9'
|
python-version: '3.x'
|
||||||
|
|
||||||
- name: Install build dependencies
|
- name: Install build dependencies
|
||||||
run: |
|
run: |
|
||||||
@@ -31,27 +31,27 @@ jobs:
|
|||||||
- name: Get current version
|
- name: Get current version
|
||||||
id: current_version
|
id: current_version
|
||||||
run: |
|
run: |
|
||||||
CURRENT_VERSION=$(grep -oP 'version = "\K[^"]+' pyproject.toml)
|
CURRENT_VERSION=$(grep -oP '^version = "\K[^"]+' pyproject.toml)
|
||||||
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||||
echo "Current version: $CURRENT_VERSION"
|
echo "Current version: $CURRENT_VERSION"
|
||||||
|
|
||||||
- name: Build package
|
- name: Build package
|
||||||
run: python -m build
|
run: python -m build
|
||||||
|
|
||||||
- name: Create GitHub Release
|
# - name: Create GitHub Release
|
||||||
id: create_release
|
# id: create_release
|
||||||
uses: softprops/action-gh-release@v2
|
# uses: softprops/action-gh-release@v2
|
||||||
env:
|
# env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
# GITHUB_TOKEN: ${{ github.token }}
|
||||||
with:
|
# with:
|
||||||
files: dist/*
|
# files: dist/*
|
||||||
tag_name: v${{ steps.current_version.outputs.version }}
|
# tag_name: v${{ steps.current_version.outputs.version }}
|
||||||
draft: false
|
# draft: false
|
||||||
prerelease: false
|
# prerelease: false
|
||||||
generate_release_notes: true
|
# generate_release_notes: true
|
||||||
|
|
||||||
- name: Publish to PyPI
|
- name: Publish to PyPI
|
||||||
uses: pypa/gh-action-pypi-publish@release/v1
|
uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc
|
||||||
with:
|
with:
|
||||||
password: ${{ secrets.PYPI_TOKEN }}
|
password: ${{ secrets.PYPI_TOKEN }}
|
||||||
skip-existing: true
|
skip-existing: true
|
||||||
|
|||||||
25
.github/workflows/publish.yml
vendored
25
.github/workflows/publish.yml
vendored
@@ -1,25 +0,0 @@
|
|||||||
name: Publish to Comfy registry
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main-blocked
|
|
||||||
paths:
|
|
||||||
- "pyproject.toml"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-node:
|
|
||||||
name: Publish Custom Node to registry
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.repository_owner == 'ltdrdata' || github.repository_owner == 'Comfy-Org' }}
|
|
||||||
steps:
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Publish Custom Node
|
|
||||||
uses: Comfy-Org/publish-node-action@v1
|
|
||||||
with:
|
|
||||||
## Add your own personal access token to your Github Repository secrets and reference it here.
|
|
||||||
personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }}
|
|
||||||
@@ -211,6 +211,7 @@ def read_cnr_info(fullpath):
|
|||||||
|
|
||||||
project = data.get('project', {})
|
project = data.get('project', {})
|
||||||
name = project.get('name').strip().lower()
|
name = project.get('name').strip().lower()
|
||||||
|
original_name = project.get('name')
|
||||||
|
|
||||||
# normalize version
|
# normalize version
|
||||||
# for example: 2.5 -> 2.5.0
|
# for example: 2.5 -> 2.5.0
|
||||||
@@ -222,6 +223,7 @@ def read_cnr_info(fullpath):
|
|||||||
if name and version: # repository is optional
|
if name and version: # repository is optional
|
||||||
return {
|
return {
|
||||||
"id": name,
|
"id": name,
|
||||||
|
"original_name": original_name,
|
||||||
"version": version,
|
"version": version,
|
||||||
"url": repository
|
"url": repository
|
||||||
}
|
}
|
||||||
|
|||||||
2689
custom-node-list.json → comfyui_manager/custom-node-list.json
Executable file → Normal file
2689
custom-node-list.json → comfyui_manager/custom-node-list.json
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,12 @@ from .generated_models import (
|
|||||||
InstalledModelInfo,
|
InstalledModelInfo,
|
||||||
ComfyUIVersionInfo,
|
ComfyUIVersionInfo,
|
||||||
|
|
||||||
|
# Import Fail Info Models
|
||||||
|
ImportFailInfoBulkRequest,
|
||||||
|
ImportFailInfoBulkResponse,
|
||||||
|
ImportFailInfoItem,
|
||||||
|
ImportFailInfoItem1,
|
||||||
|
|
||||||
# Other models
|
# Other models
|
||||||
OperationType,
|
OperationType,
|
||||||
OperationResult,
|
OperationResult,
|
||||||
@@ -88,6 +94,12 @@ __all__ = [
|
|||||||
"InstalledModelInfo",
|
"InstalledModelInfo",
|
||||||
"ComfyUIVersionInfo",
|
"ComfyUIVersionInfo",
|
||||||
|
|
||||||
|
# Import Fail Info Models
|
||||||
|
"ImportFailInfoBulkRequest",
|
||||||
|
"ImportFailInfoBulkResponse",
|
||||||
|
"ImportFailInfoItem",
|
||||||
|
"ImportFailInfoItem1",
|
||||||
|
|
||||||
# Other models
|
# Other models
|
||||||
"OperationType",
|
"OperationType",
|
||||||
"OperationResult",
|
"OperationResult",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# generated by datamodel-codegen:
|
# generated by datamodel-codegen:
|
||||||
# filename: openapi.yaml
|
# filename: openapi.yaml
|
||||||
# timestamp: 2025-06-27T04:01:45+00:00
|
# timestamp: 2025-07-31T04:52:26+00:00
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
@@ -454,6 +454,24 @@ class BatchExecutionRecord(BaseModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ImportFailInfoBulkRequest(BaseModel):
|
||||||
|
cnr_ids: Optional[List[str]] = Field(
|
||||||
|
None, description="A list of CNR IDs to check."
|
||||||
|
)
|
||||||
|
urls: Optional[List[str]] = Field(
|
||||||
|
None, description="A list of repository URLs to check."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ImportFailInfoItem1(BaseModel):
|
||||||
|
error: Optional[str] = None
|
||||||
|
traceback: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
class ImportFailInfoItem(RootModel[Optional[ImportFailInfoItem1]]):
|
||||||
|
root: Optional[ImportFailInfoItem1]
|
||||||
|
|
||||||
|
|
||||||
class QueueTaskItem(BaseModel):
|
class QueueTaskItem(BaseModel):
|
||||||
ui_id: str = Field(..., description="Unique identifier for the task")
|
ui_id: str = Field(..., description="Unique identifier for the task")
|
||||||
client_id: str = Field(..., description="Client identifier that initiated the task")
|
client_id: str = Field(..., description="Client identifier that initiated the task")
|
||||||
@@ -537,3 +555,7 @@ class HistoryResponse(BaseModel):
|
|||||||
history: Optional[Dict[str, TaskHistoryItem]] = Field(
|
history: Optional[Dict[str, TaskHistoryItem]] = Field(
|
||||||
None, description="Map of task IDs to their history items"
|
None, description="Map of task IDs to their history items"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ImportFailInfoBulkResponse(RootModel[Optional[Dict[str, ImportFailInfoItem]]]):
|
||||||
|
root: Optional[Dict[str, ImportFailInfoItem]] = None
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -41,11 +41,12 @@ from ..common.enums import NetworkMode, SecurityLevel, DBMode
|
|||||||
from ..common import context
|
from ..common import context
|
||||||
|
|
||||||
|
|
||||||
version_code = [4, 0]
|
version_code = [4, 0, 1]
|
||||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_CHANNEL = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main"
|
DEFAULT_CHANNEL = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main"
|
||||||
|
DEFAULT_CHANNEL_LEGACY = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main"
|
||||||
|
|
||||||
|
|
||||||
default_custom_nodes_path = None
|
default_custom_nodes_path = None
|
||||||
@@ -153,14 +154,8 @@ def check_invalid_nodes():
|
|||||||
cached_config = None
|
cached_config = None
|
||||||
js_path = None
|
js_path = None
|
||||||
|
|
||||||
comfy_ui_required_revision = 1930
|
|
||||||
comfy_ui_required_commit_datetime = datetime(2024, 1, 24, 0, 0, 0)
|
|
||||||
|
|
||||||
comfy_ui_revision = "Unknown"
|
|
||||||
comfy_ui_commit_datetime = datetime(1900, 1, 1, 0, 0, 0)
|
|
||||||
|
|
||||||
channel_dict = None
|
channel_dict = None
|
||||||
valid_channels = {'default', 'local'}
|
valid_channels = {'default', 'local', DEFAULT_CHANNEL, DEFAULT_CHANNEL_LEGACY}
|
||||||
channel_list = None
|
channel_list = None
|
||||||
|
|
||||||
|
|
||||||
@@ -1479,7 +1474,7 @@ def identify_node_pack_from_path(fullpath):
|
|||||||
# cnr
|
# cnr
|
||||||
cnr = cnr_utils.read_cnr_info(fullpath)
|
cnr = cnr_utils.read_cnr_info(fullpath)
|
||||||
if cnr is not None:
|
if cnr is not None:
|
||||||
return module_name, cnr['version'], cnr['id'], None
|
return module_name, cnr['version'], cnr['original_name'], None
|
||||||
|
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
@@ -1529,7 +1524,10 @@ def get_installed_node_packs():
|
|||||||
if info is None:
|
if info is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
res[info[0]] = { 'ver': info[1], 'cnr_id': info[2], 'aux_id': info[3], 'enabled': False }
|
# NOTE: don't add disabled nodepack if there is enabled nodepack
|
||||||
|
original_name = info[0].split('@')[0]
|
||||||
|
if original_name not in res:
|
||||||
|
res[info[0]] = { 'ver': info[1], 'cnr_id': info[2], 'aux_id': info[3], 'enabled': False }
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@@ -1786,16 +1784,6 @@ def try_install_script(url, repo_path, install_cmd, instant_execution=False):
|
|||||||
print(f"\n## ComfyUI-Manager: EXECUTE => {install_cmd}")
|
print(f"\n## ComfyUI-Manager: EXECUTE => {install_cmd}")
|
||||||
code = manager_funcs.run_script(install_cmd, cwd=repo_path)
|
code = manager_funcs.run_script(install_cmd, cwd=repo_path)
|
||||||
|
|
||||||
if platform.system() != "Windows":
|
|
||||||
try:
|
|
||||||
if not os.environ.get('__COMFYUI_DESKTOP_VERSION__') and comfy_ui_commit_datetime.date() < comfy_ui_required_commit_datetime.date():
|
|
||||||
print("\n\n###################################################################")
|
|
||||||
print(f"[WARN] ComfyUI-Manager: Your ComfyUI version ({comfy_ui_revision})[{comfy_ui_commit_datetime.date()}] is too old. Please update to the latest version.")
|
|
||||||
print("[WARN] The extension installation feature may not work properly in the current installed ComfyUI version on Windows environment.")
|
|
||||||
print("###################################################################\n\n")
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if code != 0:
|
if code != 0:
|
||||||
if url is None:
|
if url is None:
|
||||||
url = os.path.dirname(repo_path)
|
url = os.path.dirname(repo_path)
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ from ..data_models import (
|
|||||||
ManagerMessageName,
|
ManagerMessageName,
|
||||||
BatchExecutionRecord,
|
BatchExecutionRecord,
|
||||||
ComfyUISystemState,
|
ComfyUISystemState,
|
||||||
|
ImportFailInfoBulkRequest,
|
||||||
BatchOperation,
|
BatchOperation,
|
||||||
InstalledNodeInfo,
|
InstalledNodeInfo,
|
||||||
ComfyUIVersionInfo,
|
ComfyUIVersionInfo,
|
||||||
@@ -1656,6 +1657,67 @@ async def import_fail_info(request):
|
|||||||
return web.Response(status=500, text="Internal server error")
|
return web.Response(status=500, text="Internal server error")
|
||||||
|
|
||||||
|
|
||||||
|
@routes.post("/v2/customnode/import_fail_info_bulk")
|
||||||
|
async def import_fail_info_bulk(request):
|
||||||
|
try:
|
||||||
|
json_data = await request.json()
|
||||||
|
|
||||||
|
# Validate input using Pydantic model
|
||||||
|
request_data = ImportFailInfoBulkRequest.model_validate(json_data)
|
||||||
|
|
||||||
|
# Ensure we have either cnr_ids or urls
|
||||||
|
if not request_data.cnr_ids and not request_data.urls:
|
||||||
|
return web.Response(
|
||||||
|
status=400, text="Either 'cnr_ids' or 'urls' field is required"
|
||||||
|
)
|
||||||
|
|
||||||
|
await core.unified_manager.reload('cache')
|
||||||
|
await core.unified_manager.get_custom_nodes('default', 'cache')
|
||||||
|
|
||||||
|
results = {}
|
||||||
|
|
||||||
|
if request_data.cnr_ids:
|
||||||
|
for cnr_id in request_data.cnr_ids:
|
||||||
|
module_name = core.unified_manager.get_module_name(cnr_id)
|
||||||
|
if module_name is not None:
|
||||||
|
info = cm_global.error_dict.get(module_name)
|
||||||
|
if info is not None:
|
||||||
|
# Convert error_dict format to API spec format
|
||||||
|
results[cnr_id] = {
|
||||||
|
'error': info.get('msg', ''),
|
||||||
|
'traceback': info.get('traceback', '')
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
results[cnr_id] = None
|
||||||
|
else:
|
||||||
|
results[cnr_id] = None
|
||||||
|
|
||||||
|
if request_data.urls:
|
||||||
|
for url in request_data.urls:
|
||||||
|
module_name = core.unified_manager.get_module_name(url)
|
||||||
|
if module_name is not None:
|
||||||
|
info = cm_global.error_dict.get(module_name)
|
||||||
|
if info is not None:
|
||||||
|
# Convert error_dict format to API spec format
|
||||||
|
results[url] = {
|
||||||
|
'error': info.get('msg', ''),
|
||||||
|
'traceback': info.get('traceback', '')
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
results[url] = None
|
||||||
|
else:
|
||||||
|
results[url] = None
|
||||||
|
|
||||||
|
# Return results directly as JSON
|
||||||
|
return web.json_response(results, content_type="application/json")
|
||||||
|
except ValidationError as e:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Invalid request data: {e}")
|
||||||
|
return web.Response(status=400, text=f"Invalid request data: {e}")
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Error processing bulk import fail info: {e}")
|
||||||
|
return web.Response(status=500, text="Internal server error")
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/v2/manager/queue/reset")
|
@routes.get("/v2/manager/queue/reset")
|
||||||
async def reset_queue(request):
|
async def reset_queue(request):
|
||||||
logging.debug("[ComfyUI-Manager] Queue reset requested")
|
logging.debug("[ComfyUI-Manager] Queue reset requested")
|
||||||
|
|||||||
@@ -11,6 +11,15 @@ import hashlib
|
|||||||
import folder_paths
|
import folder_paths
|
||||||
from server import PromptServer
|
from server import PromptServer
|
||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
from nio import AsyncClient, LoginResponse, UploadResponse
|
||||||
|
matrix_nio_is_available = True
|
||||||
|
except Exception:
|
||||||
|
logging.warning(f"[ComfyUI-Manager] The matrix sharing feature has been disabled because the `matrix-nio` dependency is not installed.\n\tTo use this feature, please run the following command:\n\t{sys.executable} -m pip install matrix-nio\n")
|
||||||
|
matrix_nio_is_available = False
|
||||||
|
|
||||||
|
|
||||||
def extract_model_file_names(json_data):
|
def extract_model_file_names(json_data):
|
||||||
@@ -193,6 +202,14 @@ async def get_esheep_workflow_and_images(request):
|
|||||||
return web.Response(status=200, text=json.dumps(data))
|
return web.Response(status=200, text=json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
@PromptServer.instance.routes.get("/v2/manager/get_matrix_dep_status")
|
||||||
|
async def get_matrix_dep_status(request):
|
||||||
|
if matrix_nio_is_available:
|
||||||
|
return web.Response(status=200, text='available')
|
||||||
|
else:
|
||||||
|
return web.Response(status=200, text='unavailable')
|
||||||
|
|
||||||
|
|
||||||
def set_matrix_auth(json_data):
|
def set_matrix_auth(json_data):
|
||||||
homeserver = json_data['homeserver']
|
homeserver = json_data['homeserver']
|
||||||
username = json_data['username']
|
username = json_data['username']
|
||||||
@@ -332,15 +349,12 @@ async def share_art(request):
|
|||||||
workflowId = upload_workflow_json["workflowId"]
|
workflowId = upload_workflow_json["workflowId"]
|
||||||
|
|
||||||
# check if the user has provided Matrix credentials
|
# check if the user has provided Matrix credentials
|
||||||
if "matrix" in share_destinations:
|
if matrix_nio_is_available and "matrix" in share_destinations:
|
||||||
comfyui_share_room_id = '!LGYSoacpJPhIfBqVfb:matrix.org'
|
comfyui_share_room_id = '!LGYSoacpJPhIfBqVfb:matrix.org'
|
||||||
filename = os.path.basename(asset_filepath)
|
filename = os.path.basename(asset_filepath)
|
||||||
content_type = assetFileType
|
content_type = assetFileType
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from matrix_client.api import MatrixHttpApi
|
|
||||||
from matrix_client.client import MatrixClient
|
|
||||||
|
|
||||||
homeserver = 'matrix.org'
|
homeserver = 'matrix.org'
|
||||||
if matrix_auth:
|
if matrix_auth:
|
||||||
homeserver = matrix_auth.get('homeserver', 'matrix.org')
|
homeserver = matrix_auth.get('homeserver', 'matrix.org')
|
||||||
@@ -348,20 +362,35 @@ async def share_art(request):
|
|||||||
if not homeserver.startswith("https://"):
|
if not homeserver.startswith("https://"):
|
||||||
homeserver = "https://" + homeserver
|
homeserver = "https://" + homeserver
|
||||||
|
|
||||||
client = MatrixClient(homeserver)
|
client = AsyncClient(homeserver, matrix_auth['username'])
|
||||||
try:
|
|
||||||
token = client.login(username=matrix_auth['username'], password=matrix_auth['password'])
|
# Login
|
||||||
if not token:
|
login_resp = await client.login(matrix_auth['password'])
|
||||||
return web.json_response({"error": "Invalid Matrix credentials."}, content_type='application/json', status=400)
|
if not isinstance(login_resp, LoginResponse) or not login_resp.access_token:
|
||||||
except Exception:
|
await client.close()
|
||||||
return web.json_response({"error": "Invalid Matrix credentials."}, content_type='application/json', status=400)
|
return web.json_response({"error": "Invalid Matrix credentials."}, content_type='application/json', status=400)
|
||||||
|
|
||||||
matrix = MatrixHttpApi(homeserver, token=token)
|
# Upload asset
|
||||||
with open(asset_filepath, 'rb') as f:
|
with open(asset_filepath, 'rb') as f:
|
||||||
mxc_url = matrix.media_upload(f.read(), content_type, filename=filename)['content_uri']
|
upload_resp, _maybe_keys = await client.upload(f, content_type=content_type, filename=filename)
|
||||||
|
asset_data = f.seek(0) or f.read() # get size for info below
|
||||||
|
if not isinstance(upload_resp, UploadResponse) or not upload_resp.content_uri:
|
||||||
|
await client.close()
|
||||||
|
return web.json_response({"error": "Failed to upload asset to Matrix."}, content_type='application/json', status=500)
|
||||||
|
mxc_url = upload_resp.content_uri
|
||||||
|
|
||||||
workflow_json_mxc_url = matrix.media_upload(prompt['workflow'], 'application/json', filename='workflow.json')['content_uri']
|
# Upload workflow JSON
|
||||||
|
import io
|
||||||
|
workflow_json_bytes = json.dumps(prompt['workflow']).encode('utf-8')
|
||||||
|
workflow_io = io.BytesIO(workflow_json_bytes)
|
||||||
|
upload_workflow_resp, _maybe_keys = await client.upload(workflow_io, content_type='application/json', filename='workflow.json')
|
||||||
|
workflow_io.seek(0)
|
||||||
|
if not isinstance(upload_workflow_resp, UploadResponse) or not upload_workflow_resp.content_uri:
|
||||||
|
await client.close()
|
||||||
|
return web.json_response({"error": "Failed to upload workflow to Matrix."}, content_type='application/json', status=500)
|
||||||
|
workflow_json_mxc_url = upload_workflow_resp.content_uri
|
||||||
|
|
||||||
|
# Send text message
|
||||||
text_content = ""
|
text_content = ""
|
||||||
if title:
|
if title:
|
||||||
text_content += f"{title}\n"
|
text_content += f"{title}\n"
|
||||||
@@ -369,11 +398,47 @@ async def share_art(request):
|
|||||||
text_content += f"{description}\n"
|
text_content += f"{description}\n"
|
||||||
if credits:
|
if credits:
|
||||||
text_content += f"\ncredits: {credits}\n"
|
text_content += f"\ncredits: {credits}\n"
|
||||||
matrix.send_message(comfyui_share_room_id, text_content)
|
await client.room_send(
|
||||||
matrix.send_content(comfyui_share_room_id, mxc_url, filename, 'm.image')
|
room_id=comfyui_share_room_id,
|
||||||
matrix.send_content(comfyui_share_room_id, workflow_json_mxc_url, 'workflow.json', 'm.file')
|
message_type="m.room.message",
|
||||||
except Exception:
|
content={"msgtype": "m.text", "body": text_content}
|
||||||
logging.exception("An error occurred")
|
)
|
||||||
|
|
||||||
|
# Send image
|
||||||
|
await client.room_send(
|
||||||
|
room_id=comfyui_share_room_id,
|
||||||
|
message_type="m.room.message",
|
||||||
|
content={
|
||||||
|
"msgtype": "m.image",
|
||||||
|
"body": filename,
|
||||||
|
"url": mxc_url,
|
||||||
|
"info": {
|
||||||
|
"mimetype": content_type,
|
||||||
|
"size": len(asset_data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Send workflow JSON file
|
||||||
|
await client.room_send(
|
||||||
|
room_id=comfyui_share_room_id,
|
||||||
|
message_type="m.room.message",
|
||||||
|
content={
|
||||||
|
"msgtype": "m.file",
|
||||||
|
"body": "workflow.json",
|
||||||
|
"url": workflow_json_mxc_url,
|
||||||
|
"info": {
|
||||||
|
"mimetype": "application/json",
|
||||||
|
"size": len(workflow_json_bytes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
await client.close()
|
||||||
|
|
||||||
|
except:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
return web.json_response({"error": "An error occurred when sharing your art to Matrix."}, content_type='application/json', status=500)
|
return web.json_response({"error": "An error occurred when sharing your art to Matrix."}, content_type='application/json', status=500)
|
||||||
|
|
||||||
return web.json_response({
|
return web.json_response({
|
||||||
|
|||||||
@@ -1514,8 +1514,6 @@ app.registerExtension({
|
|||||||
tooltip: "Share"
|
tooltip: "Share"
|
||||||
}).element
|
}).element
|
||||||
);
|
);
|
||||||
|
|
||||||
app.menu?.settingsGroup.element.before(cmGroup.element);
|
|
||||||
}
|
}
|
||||||
catch(exception) {
|
catch(exception) {
|
||||||
console.log('ComfyUI is outdated. New style menu based features are disabled.');
|
console.log('ComfyUI is outdated. New style menu based features are disabled.');
|
||||||
|
|||||||
@@ -552,6 +552,20 @@ export class ShareDialog extends ComfyDialog {
|
|||||||
this.matrix_destination_checkbox.style.color = "var(--fg-color)";
|
this.matrix_destination_checkbox.style.color = "var(--fg-color)";
|
||||||
this.matrix_destination_checkbox.checked = this.share_option === 'matrix'; //true;
|
this.matrix_destination_checkbox.checked = this.share_option === 'matrix'; //true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
api.fetchApi(`/v2/manager/get_matrix_dep_status`)
|
||||||
|
.then(response => response.text())
|
||||||
|
.then(data => {
|
||||||
|
if(data == 'unavailable') {
|
||||||
|
matrix_destination_checkbox_text.style.textDecoration = "line-through";
|
||||||
|
this.matrix_destination_checkbox.disabled = true;
|
||||||
|
this.matrix_destination_checkbox.title = "It has been disabled because the 'matrix-nio' dependency is not installed. Please install this dependency to use the matrix sharing feature.";
|
||||||
|
matrix_destination_checkbox_text.title = "It has been disabled because the 'matrix-nio' dependency is not installed. Please install this dependency to use the matrix sharing feature.";
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {});
|
||||||
|
} catch (error) {}
|
||||||
|
|
||||||
this.comfyworkflows_destination_checkbox = $el("input", { type: 'checkbox', id: "comfyworkflows_destination" }, [])
|
this.comfyworkflows_destination_checkbox = $el("input", { type: 'checkbox', id: "comfyworkflows_destination" }, [])
|
||||||
const comfyworkflows_destination_checkbox_text = $el("label", {}, [" ComfyWorkflows.com"])
|
const comfyworkflows_destination_checkbox_text = $el("label", {}, [" ComfyWorkflows.com"])
|
||||||
this.comfyworkflows_destination_checkbox.style.color = "var(--fg-color)";
|
this.comfyworkflows_destination_checkbox.style.color = "var(--fg-color)";
|
||||||
|
|||||||
@@ -201,13 +201,15 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
});
|
});
|
||||||
this.LockInput = $el("input", {
|
this.LockInput = $el("input", {
|
||||||
type: "text",
|
type: "text",
|
||||||
placeholder: "",
|
placeholder: "0",
|
||||||
style: {
|
style: {
|
||||||
width: "100px",
|
width: "100px",
|
||||||
padding: "7px",
|
padding: "7px",
|
||||||
|
paddingLeft: "30px",
|
||||||
borderRadius: "4px",
|
borderRadius: "4px",
|
||||||
border: "1px solid #ddd",
|
border: "1px solid #ddd",
|
||||||
boxSizing: "border-box",
|
boxSizing: "border-box",
|
||||||
|
position: "relative",
|
||||||
},
|
},
|
||||||
oninput: (event) => {
|
oninput: (event) => {
|
||||||
let input = event.target.value;
|
let input = event.target.value;
|
||||||
@@ -375,7 +377,7 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const blockChainSection_lock = $el("div", { style: sectionStyle }, [
|
const blockChainSection_lock = $el("div", { style: sectionStyle }, [
|
||||||
$el("label", { style: labelStyle }, ["6️⃣ Pay to download"]),
|
$el("label", { style: labelStyle }, ["6️⃣ Download threshold"]),
|
||||||
$el(
|
$el(
|
||||||
"label",
|
"label",
|
||||||
{
|
{
|
||||||
@@ -395,6 +397,7 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
marginLeft: "5px",
|
marginLeft: "5px",
|
||||||
display: "flex",
|
display: "flex",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
|
position: "relative",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
@@ -408,8 +411,18 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
color: "#fff",
|
color: "#fff",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["Price US$"]
|
["Unlock with"]
|
||||||
),
|
),
|
||||||
|
$el("img", {
|
||||||
|
style: {
|
||||||
|
width: "16px",
|
||||||
|
height: "16px",
|
||||||
|
position: "absolute",
|
||||||
|
right: "75px",
|
||||||
|
zIndex: "100",
|
||||||
|
},
|
||||||
|
src: "https://static.copus.io/images/admin/202507/prod/e2919a1d8f3c2d99d3b8fe27ff94b841.png",
|
||||||
|
}),
|
||||||
this.LockInput,
|
this.LockInput,
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
@@ -420,7 +433,7 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
{ style: { display: "flex", alignItems: "center", cursor: "pointer" } },
|
{ style: { display: "flex", alignItems: "center", cursor: "pointer" } },
|
||||||
[
|
[
|
||||||
this.radioButtonsCheckOff_lock,
|
this.radioButtonsCheckOff_lock,
|
||||||
$el(
|
$el(
|
||||||
"div",
|
"div",
|
||||||
{
|
{
|
||||||
style: {
|
style: {
|
||||||
@@ -429,9 +442,7 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[
|
[$el("span", { style: { marginLeft: "5px" } }, ["OFF"])]
|
||||||
$el("span", { style: { marginLeft: "5px" } }, ["OFF"]),
|
|
||||||
]
|
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
@@ -440,7 +451,6 @@ export class CopusShareDialog extends ComfyDialog {
|
|||||||
"p",
|
"p",
|
||||||
{ style: { fontSize: "16px", color: "#fff", margin: "10px 0 0 0" } },
|
{ style: { fontSize: "16px", color: "#fff", margin: "10px 0 0 0" } },
|
||||||
[
|
[
|
||||||
"Get paid from your workflow. You can change the price and withdraw your earnings on Copus.",
|
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1626,17 +1626,35 @@ export class CustomNodesManager {
|
|||||||
getNodesInWorkflow() {
|
getNodesInWorkflow() {
|
||||||
let usedGroupNodes = new Set();
|
let usedGroupNodes = new Set();
|
||||||
let allUsedNodes = {};
|
let allUsedNodes = {};
|
||||||
|
const visitedGraphs = new Set();
|
||||||
|
|
||||||
for(let k in app.graph._nodes) {
|
const visitGraph = (graph) => {
|
||||||
let node = app.graph._nodes[k];
|
if (!graph || visitedGraphs.has(graph)) return;
|
||||||
|
visitedGraphs.add(graph);
|
||||||
|
|
||||||
if(node.type.startsWith('workflow>')) {
|
const nodes = graph._nodes || graph.nodes || [];
|
||||||
usedGroupNodes.add(node.type.slice(9));
|
for(let k in nodes) {
|
||||||
continue;
|
let node = nodes[k];
|
||||||
|
if (!node) continue;
|
||||||
|
|
||||||
|
// If it's a SubgraphNode, recurse into its graph and continue searching
|
||||||
|
if (node.isSubgraphNode?.() && node.subgraph) {
|
||||||
|
visitGraph(node.subgraph);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!node.type) continue;
|
||||||
|
|
||||||
|
// Group nodes / components
|
||||||
|
if(typeof node.type === 'string' && node.type.startsWith('workflow>')) {
|
||||||
|
usedGroupNodes.add(node.type.slice(9));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
allUsedNodes[node.type] = node;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
allUsedNodes[node.type] = node;
|
visitGraph(app.graph);
|
||||||
}
|
|
||||||
|
|
||||||
for(let k of usedGroupNodes) {
|
for(let k of usedGroupNodes) {
|
||||||
let subnodes = app.graph.extra.groupNodes[k]?.nodes;
|
let subnodes = app.graph.extra.groupNodes[k]?.nodes;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' i
|
|||||||
|
|
||||||
|
|
||||||
DEFAULT_CHANNEL = "https://raw.githubusercontent.com/Comfy-Org/ComfyUI-Manager/main"
|
DEFAULT_CHANNEL = "https://raw.githubusercontent.com/Comfy-Org/ComfyUI-Manager/main"
|
||||||
|
DEFAULT_CHANNEL_LEGACY = "https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main"
|
||||||
|
|
||||||
|
|
||||||
default_custom_nodes_path = None
|
default_custom_nodes_path = None
|
||||||
@@ -160,7 +161,7 @@ comfy_ui_revision = "Unknown"
|
|||||||
comfy_ui_commit_datetime = datetime(1900, 1, 1, 0, 0, 0)
|
comfy_ui_commit_datetime = datetime(1900, 1, 1, 0, 0, 0)
|
||||||
|
|
||||||
channel_dict = None
|
channel_dict = None
|
||||||
valid_channels = {'default', 'local'}
|
valid_channels = {'default', 'local', DEFAULT_CHANNEL, DEFAULT_CHANNEL_LEGACY}
|
||||||
channel_list = None
|
channel_list = None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1072,12 +1072,15 @@ async def fetch_customnode_list(request):
|
|||||||
if channel != 'local':
|
if channel != 'local':
|
||||||
found = 'custom'
|
found = 'custom'
|
||||||
|
|
||||||
for name, url in core.get_channel_dict().items():
|
if channel == core.DEFAULT_CHANNEL or channel == core.DEFAULT_CHANNEL_LEGACY:
|
||||||
if url == channel:
|
channel = 'default'
|
||||||
found = name
|
else:
|
||||||
break
|
for name, url in core.get_channel_dict().items():
|
||||||
|
if url == channel:
|
||||||
|
found = name
|
||||||
|
break
|
||||||
|
|
||||||
channel = found
|
channel = found
|
||||||
|
|
||||||
result = dict(channel=channel, node_packs=node_packs.to_dict())
|
result = dict(channel=channel, node_packs=node_packs.to_dict())
|
||||||
|
|
||||||
@@ -1308,6 +1311,65 @@ async def import_fail_info(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
|
@routes.post("/v2/customnode/import_fail_info_bulk")
|
||||||
|
async def import_fail_info_bulk(request):
|
||||||
|
try:
|
||||||
|
json_data = await request.json()
|
||||||
|
|
||||||
|
# Basic validation - ensure we have either cnr_ids or urls
|
||||||
|
if not isinstance(json_data, dict):
|
||||||
|
return web.Response(status=400, text="Request body must be a JSON object")
|
||||||
|
|
||||||
|
if "cnr_ids" not in json_data and "urls" not in json_data:
|
||||||
|
return web.Response(
|
||||||
|
status=400, text="Either 'cnr_ids' or 'urls' field is required"
|
||||||
|
)
|
||||||
|
|
||||||
|
await core.unified_manager.reload('cache')
|
||||||
|
await core.unified_manager.get_custom_nodes('default', 'cache')
|
||||||
|
|
||||||
|
results = {}
|
||||||
|
|
||||||
|
if "cnr_ids" in json_data:
|
||||||
|
if not isinstance(json_data["cnr_ids"], list):
|
||||||
|
return web.Response(status=400, text="'cnr_ids' must be an array")
|
||||||
|
for cnr_id in json_data["cnr_ids"]:
|
||||||
|
if not isinstance(cnr_id, str):
|
||||||
|
results[cnr_id] = {"error": "cnr_id must be a string"}
|
||||||
|
continue
|
||||||
|
module_name = core.unified_manager.get_module_name(cnr_id)
|
||||||
|
if module_name is not None:
|
||||||
|
info = cm_global.error_dict.get(module_name)
|
||||||
|
if info is not None:
|
||||||
|
results[cnr_id] = info
|
||||||
|
else:
|
||||||
|
results[cnr_id] = None
|
||||||
|
else:
|
||||||
|
results[cnr_id] = None
|
||||||
|
|
||||||
|
if "urls" in json_data:
|
||||||
|
if not isinstance(json_data["urls"], list):
|
||||||
|
return web.Response(status=400, text="'urls' must be an array")
|
||||||
|
for url in json_data["urls"]:
|
||||||
|
if not isinstance(url, str):
|
||||||
|
results[url] = {"error": "url must be a string"}
|
||||||
|
continue
|
||||||
|
module_name = core.unified_manager.get_module_name(url)
|
||||||
|
if module_name is not None:
|
||||||
|
info = cm_global.error_dict.get(module_name)
|
||||||
|
if info is not None:
|
||||||
|
results[url] = info
|
||||||
|
else:
|
||||||
|
results[url] = None
|
||||||
|
else:
|
||||||
|
results[url] = None
|
||||||
|
|
||||||
|
return web.json_response(results)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Error processing bulk import fail info: {e}")
|
||||||
|
return web.Response(status=500, text="Internal server error")
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/v2/manager/queue/reinstall")
|
@routes.post("/v2/manager/queue/reinstall")
|
||||||
async def reinstall_custom_node(request):
|
async def reinstall_custom_node(request):
|
||||||
await uninstall_custom_node(request)
|
await uninstall_custom_node(request)
|
||||||
|
|||||||
@@ -10,6 +10,16 @@ import hashlib
|
|||||||
|
|
||||||
import folder_paths
|
import folder_paths
|
||||||
from server import PromptServer
|
from server import PromptServer
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
from nio import AsyncClient, LoginResponse, UploadResponse
|
||||||
|
matrix_nio_is_available = True
|
||||||
|
except Exception:
|
||||||
|
logging.warning(f"[ComfyUI-Manager] The matrix sharing feature has been disabled because the `matrix-nio` dependency is not installed.\n\tTo use this feature, please run the following command:\n\t{sys.executable} -m pip install matrix-nio\n")
|
||||||
|
matrix_nio_is_available = False
|
||||||
|
|
||||||
|
|
||||||
def extract_model_file_names(json_data):
|
def extract_model_file_names(json_data):
|
||||||
@@ -192,6 +202,14 @@ async def get_esheep_workflow_and_images(request):
|
|||||||
return web.Response(status=200, text=json.dumps(data))
|
return web.Response(status=200, text=json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
@PromptServer.instance.routes.get("/v2/manager/get_matrix_dep_status")
|
||||||
|
async def get_matrix_dep_status(request):
|
||||||
|
if matrix_nio_is_available:
|
||||||
|
return web.Response(status=200, text='available')
|
||||||
|
else:
|
||||||
|
return web.Response(status=200, text='unavailable')
|
||||||
|
|
||||||
|
|
||||||
def set_matrix_auth(json_data):
|
def set_matrix_auth(json_data):
|
||||||
homeserver = json_data['homeserver']
|
homeserver = json_data['homeserver']
|
||||||
username = json_data['username']
|
username = json_data['username']
|
||||||
@@ -331,14 +349,12 @@ async def share_art(request):
|
|||||||
workflowId = upload_workflow_json["workflowId"]
|
workflowId = upload_workflow_json["workflowId"]
|
||||||
|
|
||||||
# check if the user has provided Matrix credentials
|
# check if the user has provided Matrix credentials
|
||||||
if "matrix" in share_destinations:
|
if matrix_nio_is_available and "matrix" in share_destinations:
|
||||||
comfyui_share_room_id = '!LGYSoacpJPhIfBqVfb:matrix.org'
|
comfyui_share_room_id = '!LGYSoacpJPhIfBqVfb:matrix.org'
|
||||||
filename = os.path.basename(asset_filepath)
|
filename = os.path.basename(asset_filepath)
|
||||||
content_type = assetFileType
|
content_type = assetFileType
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from nio import AsyncClient, LoginResponse, UploadResponse
|
|
||||||
|
|
||||||
homeserver = 'matrix.org'
|
homeserver = 'matrix.org'
|
||||||
if matrix_auth:
|
if matrix_auth:
|
||||||
homeserver = matrix_auth.get('homeserver', 'matrix.org')
|
homeserver = matrix_auth.get('homeserver', 'matrix.org')
|
||||||
|
|||||||
@@ -5045,6 +5045,105 @@
|
|||||||
"size": "1.26GB"
|
"size": "1.26GB"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v high noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v high noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v high noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v high noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v low noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v low noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v low noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v low noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v high noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v high noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v high noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v high noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v low noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v low noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v low noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v low noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 ti2v 5B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for ti2v 5B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_ti2v_5B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors",
|
||||||
|
"size": "10.0GB"
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "Comfy-Org/umt5_xxl_fp16.safetensors",
|
"name": "Comfy-Org/umt5_xxl_fp16.safetensors",
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,15 @@
|
|||||||
{
|
{
|
||||||
"custom_nodes": [
|
"custom_nodes": [
|
||||||
|
{
|
||||||
|
"author": "synchronicity-labs",
|
||||||
|
"title": "ComfyUI Sync Lipsync Node",
|
||||||
|
"reference": "https://github.com/synchronicity-labs/sync-comfyui",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/synchronicity-labs/sync-comfyui"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This custom node allows you to perform audio-video lip synchronization inside ComfyUI using a simple interface."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "joaomede",
|
"author": "joaomede",
|
||||||
"title": "ComfyUI-Unload-Model-Fork",
|
"title": "ComfyUI-Unload-Model-Fork",
|
||||||
|
|||||||
@@ -1,8 +1,282 @@
|
|||||||
{
|
{
|
||||||
"custom_nodes": [
|
"custom_nodes": [
|
||||||
|
{
|
||||||
|
"author": "perilli",
|
||||||
|
"title": "apw_nodes [REMOVED]",
|
||||||
|
"reference": "https://github.com/alessandroperilli/APW_Nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/alessandroperilli/APW_Nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A custom node suite to augment the capabilities of the [a/AP Workflows for ComfyUI](https://perilli.com/ai/comfyui/)\nNOTE: See [a/Open Creative Studio Nodes](https://github.com/alessandroperilli/OCS_Nodes)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "greengerong",
|
||||||
|
"title": "ComfyUI-Lumina-Video [REMOVED]",
|
||||||
|
"reference": "https://github.com/greengerong/ComfyUI-Lumina-Video",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/greengerong/ComfyUI-Lumina-Video"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a video generation plugin implementation for ComfyUI based on the Lumina Video model."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "SatadalAI",
|
||||||
|
"title": "Combined Upscale Node for ComfyUI [REMOVED]",
|
||||||
|
"reference": "https://github.com/SatadalAI/SATA_UtilityNode",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/SatadalAI/SATA_UtilityNode"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Combined_Upscale is a custom ComfyUI node designed for high-quality image enhancement workflows. It intelligently combines model-based upscaling with efficient CPU-based resizing, offering granular control over output dimensions and quality. Ideal for asset pipelines, UI prototyping, and generative workflows.\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "netroxin",
|
||||||
|
"title": "Netro_wildcards [REMOVED]",
|
||||||
|
"reference": "https://github.com/netroxin/comfyui_netro_wildcards",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/netroxin/comfyui_netro_wildcards"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Since I used 'simple wildcards' from Vanilla and it no longer works with the new Comfy UI version for me, I created an alternative. This CustomNode takes the entire contents of your wildcards-folder(comfyui wildcards) and creates a node for each one."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "takoyaki1118",
|
||||||
|
"title": "ComfyUI-MangaTools [REMOVED]",
|
||||||
|
"reference": "https://github.com/takoyaki1118/ComfyUI-MangaTools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/takoyaki1118/ComfyUI-MangaTools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Manga Panel Detector, Manga Panel Dispatcher, GateImage, MangaPageAssembler"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "lucasgattas",
|
||||||
|
"title": "comfyui-egregora-regional [REMOVED]",
|
||||||
|
"reference": "https://github.com/lucasgattas/comfyui-egregora-regional",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/lucasgattas/comfyui-egregora-regional"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Image Tile Split with Region-Aware Prompting for ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "lucasgattas",
|
||||||
|
"title": "comfyui-egregora-tiled [REMOVED]",
|
||||||
|
"reference": "https://github.com/lucasgattas/comfyui-egregora-tiled",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/lucasgattas/comfyui-egregora-tiled"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Tiled regional prompting + tiled VAE decode with seam-free blending for ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Seedsa",
|
||||||
|
"title": "ComfyUI Fooocus Nodes [REMOVED]",
|
||||||
|
"id": "fooocus-nodes",
|
||||||
|
"reference": "https://github.com/Seedsa/Fooocus_Nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Seedsa/Fooocus_Nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This extension provides image generation features based on Fooocus."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "zhilemann",
|
||||||
|
"title": "ComfyUI-moondream2 [REMOVED]",
|
||||||
|
"reference": "https://github.com/zhilemann/ComfyUI-moondream2",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/zhilemann/ComfyUI-moondream2"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "nodes for nightly moondream2 VLM inference\nsupports only captioning and visual queries at the moment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "shinich39",
|
||||||
|
"title": "comfyui-textarea-is-shit [REMOVED]",
|
||||||
|
"reference": "https://github.com/shinich39/comfyui-textarea-is-shit",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/shinich39/comfyui-textarea-is-shit"
|
||||||
|
],
|
||||||
|
"description": "HTML gives me a textarea like piece of shit.",
|
||||||
|
"install_type": "git-clone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "shinich39",
|
||||||
|
"title": "comfyui-poor-textarea [REMOVED]",
|
||||||
|
"reference": "https://github.com/shinich39/comfyui-poor-textarea",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/shinich39/comfyui-poor-textarea"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Add commentify, indentation, auto-close brackets in textarea."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "InfiniNode",
|
||||||
|
"title": "Comfyui-InfiniNode-Model-Suite [UNSAFE/REMOVED]",
|
||||||
|
"reference": "https://github.com/InfiniNode/Comfyui-InfiniNode-Model-Suite",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/InfiniNode/Comfyui-InfiniNode-Model-Suite"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Welcome to the InfiniNode Model Suite, a custom node pack for ComfyUI that transforms the process of manipulating generative AI models. Our suite is a direct implementation of the 'GUI-Based Key Converter Development Plan,' designed to remove technical barriers for advanced AI practitioners and integrate seamlessly with existing image generation pipelines.[w/This node pack contains a node that has a vulnerability allowing write to arbitrary file paths.]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Avalre",
|
||||||
|
"title": "ComfyUI-avaNodes [REMOVED]",
|
||||||
|
"reference": "https://github.com/Avalre/ComfyUI-avaNodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Avalre/ComfyUI-avaNodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "These nodes were created to personalize/optimize several ComfyUI nodes for my own use. You can replicate the functionality of most of my nodes by some combination of default ComfyUI nodes and custom nodes from other developers."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Alectriciti",
|
||||||
|
"title": "comfyui-creativeprompts [REMOVED]",
|
||||||
|
"reference": "https://github.com/Alectriciti/comfyui-creativeprompts",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Alectriciti/comfyui-creativeprompts"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A creative alternative to dynamicprompts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "flybirdxx",
|
||||||
|
"title": "ComfyUI Sliding Window [REMOVED]",
|
||||||
|
"reference": "https://github.com/PixWizardry/ComfyUI_Sliding_Window",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/PixWizardry/ComfyUI_Sliding_Window"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This set of nodes provides a powerful sliding window or 'tiling' technique for processing long videos and animations in ComfyUI. It allows you to work on animations that are longer than your VRAM would typically allow by breaking the job into smaller, overlapping chunks and seamlessly blending them back together."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "SykkoAtHome",
|
||||||
|
"title": "Sykko Tools for ComfyUI [REMOVED]",
|
||||||
|
"reference": "https://github.com/SykkoAtHome/ComfyUI_SykkoTools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/SykkoAtHome/ComfyUI_SykkoTools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Utilities for working with camera animations inside ComfyUI. The repository currently provides a node for loading camera motion from ASCII FBX files and a corresponding command line helper for debugging."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "hananbeer",
|
||||||
|
"title": "node_dev - ComfyUI Node Development Helper [REMOVED]",
|
||||||
|
"reference": "https://github.com/hananbeer/node_dev",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/hananbeer/node_dev"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Browse to this endpoint to reload custom nodes for more streamlined development:\nhttp://127.0.0.1:8188/node_dev/reload/<module_name>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Charonartist",
|
||||||
|
"title": "Comfyui_gemini_tts_node [REMOVED]",
|
||||||
|
"reference": "https://github.com/Charonartist/Comfyui_gemini_tts_node",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Charonartist/Comfyui_gemini_tts_node"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This custom node is a ComfyUI node for generating speech from text using the Gemini 2.5 Flash Preview TTS API."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "squirrel765",
|
||||||
|
"title": "lorasubdirectory [REMOVED]",
|
||||||
|
"reference": "https://github.com/andrewsthomasj/lorasubdirectory",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/andrewsthomasj/lorasubdirectory"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "only show dropdown of loras ina a given subdirectory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "shingo1228",
|
||||||
|
"title": "ComfyUI-send-Eagle(slim) [REVMOED]",
|
||||||
|
"id": "send-eagle",
|
||||||
|
"reference": "https://github.com/shingo1228/ComfyUI-send-eagle-slim",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/shingo1228/ComfyUI-send-eagle-slim"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:Send Webp Image to Eagle. This is an extension node for ComfyUI that allows you to send generated images in webp format to Eagle. This extension node is a re-implementation of the Eagle linkage functions of the previous ComfyUI-send-Eagle node, focusing on the functions required for this node."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "shingo1228",
|
||||||
|
"title": "ComfyUI-SDXL-EmptyLatentImage [REVMOED]",
|
||||||
|
"id": "sdxl-emptylatent",
|
||||||
|
"reference": "https://github.com/shingo1228/ComfyUI-SDXL-EmptyLatentImage",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/shingo1228/ComfyUI-SDXL-EmptyLatentImage"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:SDXL Empty Latent Image. An extension node for ComfyUI that allows you to select a resolution from the pre-defined json files and output a Latent Image."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "chaunceyyann",
|
||||||
|
"title": "ComfyUI Image Processing Nodes [REMOVED]",
|
||||||
|
"reference": "https://github.com/chaunceyyann/comfyui-image-processing-nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/chaunceyyann/comfyui-image-processing-nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A collection of custom nodes for ComfyUI focused on image processing operations."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "OgreLemonSoup",
|
||||||
|
"title": "Gallery&Tabs [DEPRECATED]",
|
||||||
|
"id": "LoadImageGallery",
|
||||||
|
"reference": "https://github.com/OgreLemonSoup/ComfyUI-Load-Image-Gallery",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/OgreLemonSoup/ComfyUI-Load-Image-Gallery"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Adds a gallery to the Load Image node and tabs for Load Checkpoint/Lora/etc nodes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "11dogzi",
|
||||||
|
"title": "Qwen-Image ComfyUI [REMOVED]",
|
||||||
|
"reference": "https://github.com/11dogzi/Comfyui-Qwen-Image",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/11dogzi/Comfyui-Qwen-Image"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a custom node package that integrates the Qwen-Image model into ComfyUI."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "BAIS1C",
|
||||||
|
"title": "ComfyUI-AudioDuration [REMOVED]",
|
||||||
|
"reference": "https://github.com/BAIS1C/ComfyUI_BASICDancePoser",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BAIS1C/ComfyUI_BASICDancePoser"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Node to extract Dance poses from Music to control Video Generations.\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "BAIS1C",
|
||||||
|
"title": "ComfyUI_BASICSAdvancedDancePoser [REMOVED]",
|
||||||
|
"reference": "https://github.com/BAIS1C/ComfyUI_BASICSAdvancedDancePoser",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BAIS1C/ComfyUI_BASICSAdvancedDancePoser"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Professional COCO-WholeBody 133-keypoint dance animation system for ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "fablestudio",
|
||||||
|
"title": "ComfyUI-Showrunner-Utils [REMOVED]",
|
||||||
|
"reference": "https://github.com/fablestudio/ComfyUI-Showrunner-Utils",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/fablestudio/ComfyUI-Showrunner-Utils"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Align Face, Generate Timestamp, GetMostCommonColors, Alpha Crop and Position Image, Shrink Image"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "skayka",
|
"author": "skayka",
|
||||||
"title": "ComfyUI-DreamFit []REMOVED]",
|
"title": "ComfyUI-DreamFit [REMOVED]",
|
||||||
"reference": "https://github.com/skayka/ComfyUI-DreamFit",
|
"reference": "https://github.com/skayka/ComfyUI-DreamFit",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/skayka/ComfyUI-DreamFit"
|
"https://github.com/skayka/ComfyUI-DreamFit"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,106 @@
|
|||||||
{
|
{
|
||||||
"models": [
|
"models": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v high noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v high noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v high noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v high noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v low noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v low noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 i2v low noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for i2v low noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v high noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v high noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v high noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v high noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v low noise 14B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v low noise 14B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp16.safetensors",
|
||||||
|
"size": "28.6GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 t2v low noise 14B (fp8_scaled)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for t2v low noise 14B (fp8_scaled)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_t2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp8_scaled.safetensors",
|
||||||
|
"size": "14.3GB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Comfy-Org/Wan2.2 ti2v 5B (fp16)",
|
||||||
|
"type": "diffusion_model",
|
||||||
|
"base": "Wan2.2",
|
||||||
|
"save_path": "diffusion_models/Wan2.2",
|
||||||
|
"description": "Wan2.2 diffusion model for ti2v 5B (fp16)",
|
||||||
|
"reference": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged",
|
||||||
|
"filename": "wan2.2_ti2v_5B_fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors",
|
||||||
|
"size": "10.0GB"
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "sam2.1_hiera_tiny.pt",
|
"name": "sam2.1_hiera_tiny.pt",
|
||||||
"type": "sam2.1",
|
"type": "sam2.1",
|
||||||
@@ -586,109 +687,6 @@
|
|||||||
"filename": "llava_llama3_fp16.safetensors",
|
"filename": "llava_llama3_fp16.safetensors",
|
||||||
"url": "https://huggingface.co/Comfy-Org/HunyuanVideo_repackaged/resolve/main/split_files/text_encoders/llava_llama3_fp16.safetensors",
|
"url": "https://huggingface.co/Comfy-Org/HunyuanVideo_repackaged/resolve/main/split_files/text_encoders/llava_llama3_fp16.safetensors",
|
||||||
"size": "16.1GB"
|
"size": "16.1GB"
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "PixArt-Sigma-XL-2-512-MS.safetensors (diffusion)",
|
|
||||||
"type": "diffusion_model",
|
|
||||||
"base": "pixart-sigma",
|
|
||||||
"save_path": "diffusion_models/PixArt-Sigma",
|
|
||||||
"description": "PixArt-Sigma Diffusion model",
|
|
||||||
"reference": "https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-512-MS",
|
|
||||||
"filename": "PixArt-Sigma-XL-2-512-MS.safetensors",
|
|
||||||
"url": "https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-512-MS/resolve/main/transformer/diffusion_pytorch_model.safetensors",
|
|
||||||
"size": "2.44GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "PixArt-Sigma-XL-2-1024-MS.safetensors (diffusion)",
|
|
||||||
"type": "diffusion_model",
|
|
||||||
"base": "pixart-sigma",
|
|
||||||
"save_path": "diffusion_models/PixArt-Sigma",
|
|
||||||
"description": "PixArt-Sigma Diffusion model",
|
|
||||||
"reference": "https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS",
|
|
||||||
"filename": "PixArt-Sigma-XL-2-1024-MS.safetensors",
|
|
||||||
"url": "https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS/resolve/main/transformer/diffusion_pytorch_model.safetensors",
|
|
||||||
"size": "2.44GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "PixArt-XL-2-1024-MS.safetensors (diffusion)",
|
|
||||||
"type": "diffusion_model",
|
|
||||||
"base": "pixart-alpha",
|
|
||||||
"save_path": "diffusion_models/PixArt-Alpha",
|
|
||||||
"description": "PixArt-Alpha Diffusion model",
|
|
||||||
"reference": "https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS",
|
|
||||||
"filename": "PixArt-XL-2-1024-MS.safetensors",
|
|
||||||
"url": "https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS/resolve/main/transformer/diffusion_pytorch_model.safetensors",
|
|
||||||
"size": "2.45GB"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "Comfy-Org/hunyuan_video_t2v_720p_bf16.safetensors",
|
|
||||||
"type": "diffusion_model",
|
|
||||||
"base": "Hunyuan Video",
|
|
||||||
"save_path": "diffusion_models/hunyuan_video",
|
|
||||||
"description": "Huyuan Video diffusion model. repackaged version.",
|
|
||||||
"reference": "https://huggingface.co/Comfy-Org/HunyuanVideo_repackaged",
|
|
||||||
"filename": "hunyuan_video_t2v_720p_bf16.safetensors",
|
|
||||||
"url": "https://huggingface.co/Comfy-Org/HunyuanVideo_repackaged/resolve/main/split_files/diffusion_models/hunyuan_video_t2v_720p_bf16.safetensors",
|
|
||||||
"size": "25.6GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Comfy-Org/hunyuan_video_vae_bf16.safetensors",
|
|
||||||
"type": "VAE",
|
|
||||||
"base": "Hunyuan Video",
|
|
||||||
"save_path": "VAE",
|
|
||||||
"description": "Huyuan Video VAE model. repackaged version.",
|
|
||||||
"reference": "https://huggingface.co/Comfy-Org/HunyuanVideo_repackaged",
|
|
||||||
"filename": "hunyuan_video_vae_bf16.safetensors",
|
|
||||||
"url": "https://huggingface.co/Comfy-Org/HunyuanVideo_repackaged/resolve/main/split_files/vae/hunyuan_video_vae_bf16.safetensors",
|
|
||||||
"size": "493MB"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "LTX-Video 2B v0.9.1 Checkpoint",
|
|
||||||
"type": "checkpoint",
|
|
||||||
"base": "LTX-Video",
|
|
||||||
"save_path": "checkpoints/LTXV",
|
|
||||||
"description": "LTX-Video is the first DiT-based video generation model capable of generating high-quality videos in real-time. It produces 24 FPS videos at a 768x512 resolution faster than they can be watched. Trained on a large-scale dataset of diverse videos, the model generates high-resolution videos with realistic and varied content.",
|
|
||||||
"reference": "https://huggingface.co/Lightricks/LTX-Video",
|
|
||||||
"filename": "ltx-video-2b-v0.9.1.safetensors",
|
|
||||||
"url": "https://huggingface.co/Lightricks/LTX-Video/resolve/main/ltx-video-2b-v0.9.1.safetensors",
|
|
||||||
"size": "5.72GB"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "XLabs-AI/flux-canny-controlnet-v3.safetensors",
|
|
||||||
"type": "controlnet",
|
|
||||||
"base": "FLUX.1",
|
|
||||||
"save_path": "xlabs/controlnets",
|
|
||||||
"description": "ControlNet checkpoints for FLUX.1-dev model by Black Forest Labs.",
|
|
||||||
"reference": "https://huggingface.co/XLabs-AI/flux-controlnet-collections",
|
|
||||||
"filename": "flux-canny-controlnet-v3.safetensors",
|
|
||||||
"url": "https://huggingface.co/XLabs-AI/flux-controlnet-collections/resolve/main/flux-canny-controlnet-v3.safetensors",
|
|
||||||
"size": "1.49GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "XLabs-AI/flux-depth-controlnet-v3.safetensors",
|
|
||||||
"type": "controlnet",
|
|
||||||
"base": "FLUX.1",
|
|
||||||
"save_path": "xlabs/controlnets",
|
|
||||||
"description": "ControlNet checkpoints for FLUX.1-dev model by Black Forest Labs.",
|
|
||||||
"reference": "https://huggingface.co/XLabs-AI/flux-controlnet-collections",
|
|
||||||
"filename": "flux-depth-controlnet-v3.safetensors",
|
|
||||||
"url": "https://huggingface.co/XLabs-AI/flux-controlnet-collections/resolve/main/flux-depth-controlnet-v3.safetensors",
|
|
||||||
"size": "1.49GB"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "XLabs-AI/flux-hed-controlnet-v3.safetensors",
|
|
||||||
"type": "controlnet",
|
|
||||||
"base": "FLUX.1",
|
|
||||||
"save_path": "xlabs/controlnets",
|
|
||||||
"description": "ControlNet checkpoints for FLUX.1-dev model by Black Forest Labs.",
|
|
||||||
"reference": "https://huggingface.co/XLabs-AI/flux-controlnet-collections",
|
|
||||||
"filename": "flux-hed-controlnet-v3.safetensors",
|
|
||||||
"url": "https://huggingface.co/XLabs-AI/flux-controlnet-collections/resolve/main/flux-hed-controlnet-v3.safetensors",
|
|
||||||
"size": "1.49GB"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,6 +341,16 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A minimal test suite demonstrating how remote COMBO inputs behave in ComfyUI, with and without force_input"
|
"description": "A minimal test suite demonstrating how remote COMBO inputs behave in ComfyUI, with and without force_input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "J1mB091",
|
||||||
|
"title": "ComfyUI-J1mB091 Custom Nodes",
|
||||||
|
"reference": "https://github.com/J1mB091/ComfyUI-J1mB091",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/J1mB091/ComfyUI-J1mB091"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Vibe Coded ComfyUI Custom Nodes"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
59
openapi.yaml
59
openapi.yaml
@@ -782,6 +782,39 @@ components:
|
|||||||
minimum: 0
|
minimum: 0
|
||||||
default: 0
|
default: 0
|
||||||
required: [batch_id, start_time, state_before]
|
required: [batch_id, start_time, state_before]
|
||||||
|
|
||||||
|
ImportFailInfoBulkRequest:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
cnr_ids:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: A list of CNR IDs to check.
|
||||||
|
urls:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: A list of repository URLs to check.
|
||||||
|
|
||||||
|
ImportFailInfoBulkResponse:
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
$ref: '#/components/schemas/ImportFailInfoItem'
|
||||||
|
description: >-
|
||||||
|
A dictionary where each key is a cnr_id or url from the request,
|
||||||
|
and the value is the corresponding error info.
|
||||||
|
|
||||||
|
ImportFailInfoItem:
|
||||||
|
oneOf:
|
||||||
|
- type: object
|
||||||
|
properties:
|
||||||
|
error:
|
||||||
|
type: string
|
||||||
|
traceback:
|
||||||
|
type: string
|
||||||
|
- type: "null"
|
||||||
|
|
||||||
securitySchemes:
|
securitySchemes:
|
||||||
securityLevel:
|
securityLevel:
|
||||||
type: apiKey
|
type: apiKey
|
||||||
@@ -1017,6 +1050,32 @@ paths:
|
|||||||
description: Processing started
|
description: Processing started
|
||||||
'201':
|
'201':
|
||||||
description: Processing already in progress
|
description: Processing already in progress
|
||||||
|
|
||||||
|
/v2/customnode/import_fail_info_bulk:
|
||||||
|
post:
|
||||||
|
summary: Get import failure info for multiple nodes
|
||||||
|
description: Retrieves recorded import failure information for a list of custom nodes.
|
||||||
|
tags:
|
||||||
|
- customnode
|
||||||
|
requestBody:
|
||||||
|
description: A list of CNR IDs or repository URLs to check.
|
||||||
|
required: true
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/ImportFailInfoBulkRequest'
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: A dictionary containing the import failure information.
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/ImportFailInfoBulkResponse'
|
||||||
|
'400':
|
||||||
|
description: Bad Request. The request body is invalid.
|
||||||
|
'500':
|
||||||
|
description: Internal Server Error.
|
||||||
|
|
||||||
/v2/manager/queue/reset:
|
/v2/manager/queue/reset:
|
||||||
get:
|
get:
|
||||||
summary: Reset queue
|
summary: Reset queue
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
[project]
|
[project]
|
||||||
name = "comfyui-manager"
|
name = "comfyui-manager"
|
||||||
license = { text = "GPL-3.0-only" }
|
license = { text = "GPL-3.0-only" }
|
||||||
version = "4.0.0-beta.10"
|
version = "4.0.1-beta.5"
|
||||||
requires-python = ">= 3.9"
|
requires-python = ">= 3.9"
|
||||||
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -27,7 +27,7 @@ classifiers = [
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"GitPython",
|
"GitPython",
|
||||||
"PyGithub",
|
"PyGithub",
|
||||||
"matrix-client==0.4.0",
|
# "matrix-nio",
|
||||||
"transformers",
|
"transformers",
|
||||||
"huggingface-hub>0.20",
|
"huggingface-hub>0.20",
|
||||||
"typer",
|
"typer",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
GitPython
|
GitPython
|
||||||
PyGithub
|
PyGithub
|
||||||
matrix-nio
|
# matrix-nio
|
||||||
transformers
|
transformers
|
||||||
huggingface-hub>0.20
|
huggingface-hub>0.20
|
||||||
typer
|
typer
|
||||||
|
|||||||
Reference in New Issue
Block a user