Add custom nodes, Civitai loras (LFS), and vast.ai setup script
Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Includes 30 custom nodes committed directly, 7 Civitai-exclusive loras stored via Git LFS, and a setup script that installs all dependencies and downloads HuggingFace-hosted models on vast.ai. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
70
custom_nodes/rgthree-comfy/py/pyproject.py
Normal file
70
custom_nodes/rgthree-comfy/py/pyproject.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
|
||||
from .utils import set_dict_value
|
||||
|
||||
_THIS_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
_FILE_PY_PROJECT = os.path.join(_THIS_DIR, '..', 'pyproject.toml')
|
||||
|
||||
|
||||
def read_pyproject():
|
||||
"""Reads the pyproject.toml file"""
|
||||
data = {}
|
||||
last_key = ''
|
||||
lines = []
|
||||
# I'd like to use tomllib/tomli, but I'd much rather not introduce dependencies since I've yet to
|
||||
# need to and not everyone may have 3.11. We've got a controlled config file anyway.
|
||||
with open(_FILE_PY_PROJECT, "r", encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
if re.match(r'\[([^\]]+)\]$', line):
|
||||
last_key = line[1:-1]
|
||||
set_dict_value(data, last_key, data[last_key] if last_key in data else {})
|
||||
continue
|
||||
value_matches = re.match(r'^([^\s\=]+)\s*=\s*(.*)$', line)
|
||||
if value_matches:
|
||||
try:
|
||||
set_dict_value(data, f'{last_key}.{value_matches[1]}', json.loads(value_matches[2]))
|
||||
except json.decoder.JSONDecodeError:
|
||||
# We don't handle multiline arrays or curly brackets; that's ok, we know the file.
|
||||
pass
|
||||
|
||||
return data
|
||||
|
||||
|
||||
_DATA = read_pyproject()
|
||||
|
||||
# We would want these to fail if they don't exist, so assume they do.
|
||||
VERSION: str = _DATA['project']['version']
|
||||
NAME: str = _DATA['project']['name']
|
||||
LOGO_URL: str = _DATA['tool']['comfy']['Icon']
|
||||
|
||||
if not LOGO_URL.endswith('.svg'):
|
||||
raise ValueError('Bad logo url.')
|
||||
|
||||
LOGO_SVG = None
|
||||
async def get_logo_svg():
|
||||
import aiohttp
|
||||
global LOGO_SVG
|
||||
if LOGO_SVG is not None:
|
||||
return LOGO_SVG
|
||||
# Fetch the logo so we have any updated markup.
|
||||
try:
|
||||
async with aiohttp.ClientSession(
|
||||
trust_env=True, connector=aiohttp.TCPConnector(verify_ssl=True)
|
||||
) as session:
|
||||
headers = {
|
||||
"user-agent": f"rgthree-comfy/{VERSION}",
|
||||
'Cache-Control': 'no-cache',
|
||||
'Pragma': 'no-cache',
|
||||
'Expires': '0'
|
||||
}
|
||||
async with session.get(LOGO_URL, headers=headers) as resp:
|
||||
LOGO_SVG = await resp.text()
|
||||
LOGO_SVG = re.sub(r'(id="bg".*fill=)"[^\"]+"', r'\1"{bg}"', LOGO_SVG)
|
||||
LOGO_SVG = re.sub(r'(id="fg".*fill=)"[^\"]+"', r'\1"{fg}"', LOGO_SVG)
|
||||
except Exception:
|
||||
LOGO_SVG = '<svg></svg>'
|
||||
return LOGO_SVG
|
||||
Reference in New Issue
Block a user