mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2026-09-03 13:37:08 +08:00
Merge branch 'master' of github.com:comfyanonymous/ComfyUI into feat/linux-amd-setup
This commit is contained in:
commit
2530ec5ad1
40
.github/workflows/check-line-endings.yml
vendored
Normal file
40
.github/workflows/check-line-endings.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
name: Check for Windows Line Endings
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: ['*'] # Trigger on all pull requests to any branch
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-line-endings:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # Fetch all history to compare changes
|
||||||
|
|
||||||
|
- name: Check for Windows line endings (CRLF)
|
||||||
|
run: |
|
||||||
|
# Get the list of changed files in the PR
|
||||||
|
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}..HEAD)
|
||||||
|
|
||||||
|
# Flag to track if CRLF is found
|
||||||
|
CRLF_FOUND=false
|
||||||
|
|
||||||
|
# Loop through each changed file
|
||||||
|
for FILE in $CHANGED_FILES; do
|
||||||
|
# Check if the file exists and is a text file
|
||||||
|
if [ -f "$FILE" ] && file "$FILE" | grep -q "text"; then
|
||||||
|
# Check for CRLF line endings
|
||||||
|
if grep -UP '\r$' "$FILE"; then
|
||||||
|
echo "Error: Windows line endings (CRLF) detected in $FILE"
|
||||||
|
CRLF_FOUND=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Exit with error if CRLF was found
|
||||||
|
if [ "$CRLF_FOUND" = true ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@ -144,6 +144,7 @@ class PerformanceFeature(enum.Enum):
|
|||||||
parser.add_argument("--fast", nargs="*", type=PerformanceFeature, help="Enable some untested and potentially quality deteriorating optimizations. --fast with no arguments enables everything. You can pass a list specific optimizations if you only want to enable specific ones. Current valid optimizations: fp16_accumulation fp8_matrix_mult cublas_ops")
|
parser.add_argument("--fast", nargs="*", type=PerformanceFeature, help="Enable some untested and potentially quality deteriorating optimizations. --fast with no arguments enables everything. You can pass a list specific optimizations if you only want to enable specific ones. Current valid optimizations: fp16_accumulation fp8_matrix_mult cublas_ops")
|
||||||
|
|
||||||
parser.add_argument("--mmap-torch-files", action="store_true", help="Use mmap when loading ckpt/pt files.")
|
parser.add_argument("--mmap-torch-files", action="store_true", help="Use mmap when loading ckpt/pt files.")
|
||||||
|
parser.add_argument("--disable-mmap", action="store_true", help="Don't use mmap when loading safetensors.")
|
||||||
|
|
||||||
parser.add_argument("--dont-print-server", action="store_true", help="Don't print server output.")
|
parser.add_argument("--dont-print-server", action="store_true", help="Don't print server output.")
|
||||||
parser.add_argument("--quick-test-for-ci", action="store_true", help="Quick test for CI.")
|
parser.add_argument("--quick-test-for-ci", action="store_true", help="Quick test for CI.")
|
||||||
|
|||||||
@ -1214,7 +1214,7 @@ class Omnigen2(supported_models_base.BASE):
|
|||||||
def clip_target(self, state_dict={}):
|
def clip_target(self, state_dict={}):
|
||||||
pref = self.text_encoder_key_prefix[0]
|
pref = self.text_encoder_key_prefix[0]
|
||||||
hunyuan_detect = comfy.text_encoders.hunyuan_video.llama_detect(state_dict, "{}qwen25_3b.transformer.".format(pref))
|
hunyuan_detect = comfy.text_encoders.hunyuan_video.llama_detect(state_dict, "{}qwen25_3b.transformer.".format(pref))
|
||||||
return supported_models_base.ClipTarget(comfy.text_encoders.omnigen2.LuminaTokenizer, comfy.text_encoders.omnigen2.te(**hunyuan_detect))
|
return supported_models_base.ClipTarget(comfy.text_encoders.omnigen2.Omnigen2Tokenizer, comfy.text_encoders.omnigen2.te(**hunyuan_detect))
|
||||||
|
|
||||||
|
|
||||||
models = [LotusD, Stable_Zero123, SD15_instructpix2pix, SD15, SD20, SD21UnclipL, SD21UnclipH, SDXL_instructpix2pix, SDXLRefiner, SDXL, SSD1B, KOALA_700M, KOALA_1B, Segmind_Vega, SD_X4Upscaler, Stable_Cascade_C, Stable_Cascade_B, SV3D_u, SV3D_p, SD3, StableAudio, AuraFlow, PixArtAlpha, PixArtSigma, HunyuanDiT, HunyuanDiT1, FluxInpaint, Flux, FluxSchnell, GenmoMochi, LTXV, HunyuanVideoSkyreelsI2V, HunyuanVideoI2V, HunyuanVideo, CosmosT2V, CosmosI2V, CosmosT2IPredict2, CosmosI2VPredict2, Lumina2, WAN21_T2V, WAN21_I2V, WAN21_FunControl2V, WAN21_Vace, WAN21_Camera, Hunyuan3Dv2mini, Hunyuan3Dv2, HiDream, Chroma, ACEStep, Omnigen2]
|
models = [LotusD, Stable_Zero123, SD15_instructpix2pix, SD15, SD20, SD21UnclipL, SD21UnclipH, SDXL_instructpix2pix, SDXLRefiner, SDXL, SSD1B, KOALA_700M, KOALA_1B, Segmind_Vega, SD_X4Upscaler, Stable_Cascade_C, Stable_Cascade_B, SV3D_u, SV3D_p, SD3, StableAudio, AuraFlow, PixArtAlpha, PixArtSigma, HunyuanDiT, HunyuanDiT1, FluxInpaint, Flux, FluxSchnell, GenmoMochi, LTXV, HunyuanVideoSkyreelsI2V, HunyuanVideoI2V, HunyuanVideo, CosmosT2V, CosmosI2V, CosmosT2IPredict2, CosmosI2VPredict2, Lumina2, WAN21_T2V, WAN21_I2V, WAN21_FunControl2V, WAN21_Vace, WAN21_Camera, Hunyuan3Dv2mini, Hunyuan3Dv2, HiDream, Chroma, ACEStep, Omnigen2]
|
||||||
|
|||||||
@ -31,6 +31,7 @@ from einops import rearrange
|
|||||||
from comfy.cli_args import args
|
from comfy.cli_args import args
|
||||||
|
|
||||||
MMAP_TORCH_FILES = args.mmap_torch_files
|
MMAP_TORCH_FILES = args.mmap_torch_files
|
||||||
|
DISABLE_MMAP = args.disable_mmap
|
||||||
|
|
||||||
ALWAYS_SAFE_LOAD = False
|
ALWAYS_SAFE_LOAD = False
|
||||||
if hasattr(torch.serialization, "add_safe_globals"): # TODO: this was added in pytorch 2.4, the unsafe path should be removed once earlier versions are deprecated
|
if hasattr(torch.serialization, "add_safe_globals"): # TODO: this was added in pytorch 2.4, the unsafe path should be removed once earlier versions are deprecated
|
||||||
@ -58,7 +59,10 @@ def load_torch_file(ckpt, safe_load=False, device=None, return_metadata=False):
|
|||||||
with safetensors.safe_open(ckpt, framework="pt", device=device.type) as f:
|
with safetensors.safe_open(ckpt, framework="pt", device=device.type) as f:
|
||||||
sd = {}
|
sd = {}
|
||||||
for k in f.keys():
|
for k in f.keys():
|
||||||
sd[k] = f.get_tensor(k)
|
tensor = f.get_tensor(k)
|
||||||
|
if DISABLE_MMAP: # TODO: Not sure if this is the best way to bypass the mmap issues
|
||||||
|
tensor = tensor.to(device=device, copy=True)
|
||||||
|
sd[k] = tensor
|
||||||
if return_metadata:
|
if return_metadata:
|
||||||
metadata = f.metadata()
|
metadata = f.metadata()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@ -406,7 +406,7 @@ class GeminiInputFiles(ComfyNodeABC):
|
|||||||
|
|
||||||
def create_file_part(self, file_path: str) -> GeminiPart:
|
def create_file_part(self, file_path: str) -> GeminiPart:
|
||||||
mime_type = (
|
mime_type = (
|
||||||
GeminiMimeType.pdf
|
GeminiMimeType.application_pdf
|
||||||
if file_path.endswith(".pdf")
|
if file_path.endswith(".pdf")
|
||||||
else GeminiMimeType.text_plain
|
else GeminiMimeType.text_plain
|
||||||
)
|
)
|
||||||
|
|||||||
@ -247,7 +247,7 @@ class MaskComposite:
|
|||||||
visible_width, visible_height = (right - left, bottom - top,)
|
visible_width, visible_height = (right - left, bottom - top,)
|
||||||
|
|
||||||
source_portion = source[:, :visible_height, :visible_width]
|
source_portion = source[:, :visible_height, :visible_width]
|
||||||
destination_portion = destination[:, top:bottom, left:right]
|
destination_portion = output[:, top:bottom, left:right]
|
||||||
|
|
||||||
if operation == "multiply":
|
if operation == "multiply":
|
||||||
output[:, top:bottom, left:right] = destination_portion * source_portion
|
output[:, top:bottom, left:right] = destination_portion * source_portion
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
comfyui-frontend-package==1.23.4
|
comfyui-frontend-package==1.23.4
|
||||||
comfyui-workflow-templates==0.1.35
|
comfyui-workflow-templates==0.1.36
|
||||||
comfyui-embedded-docs==0.2.4
|
comfyui-embedded-docs==0.2.4
|
||||||
torch
|
torch
|
||||||
torchsde
|
torchsde
|
||||||
|
|||||||
@ -10,11 +10,11 @@ import urllib.parse
|
|||||||
server_address = "127.0.0.1:8188"
|
server_address = "127.0.0.1:8188"
|
||||||
client_id = str(uuid.uuid4())
|
client_id = str(uuid.uuid4())
|
||||||
|
|
||||||
def queue_prompt(prompt):
|
def queue_prompt(prompt, prompt_id):
|
||||||
p = {"prompt": prompt, "client_id": client_id}
|
p = {"prompt": prompt, "client_id": client_id, "prompt_id": prompt_id}
|
||||||
data = json.dumps(p).encode('utf-8')
|
data = json.dumps(p).encode('utf-8')
|
||||||
req = urllib.request.Request("http://{}/prompt".format(server_address), data=data)
|
req = urllib.request.Request("http://{}/prompt".format(server_address), data=data)
|
||||||
return json.loads(urllib.request.urlopen(req).read())
|
urllib.request.urlopen(req).read()
|
||||||
|
|
||||||
def get_image(filename, subfolder, folder_type):
|
def get_image(filename, subfolder, folder_type):
|
||||||
data = {"filename": filename, "subfolder": subfolder, "type": folder_type}
|
data = {"filename": filename, "subfolder": subfolder, "type": folder_type}
|
||||||
@ -27,7 +27,8 @@ def get_history(prompt_id):
|
|||||||
return json.loads(response.read())
|
return json.loads(response.read())
|
||||||
|
|
||||||
def get_images(ws, prompt):
|
def get_images(ws, prompt):
|
||||||
prompt_id = queue_prompt(prompt)['prompt_id']
|
prompt_id = str(uuid.uuid4())
|
||||||
|
queue_prompt(prompt, prompt_id)
|
||||||
output_images = {}
|
output_images = {}
|
||||||
while True:
|
while True:
|
||||||
out = ws.recv()
|
out = ws.recv()
|
||||||
|
|||||||
@ -678,7 +678,7 @@ class PromptServer():
|
|||||||
|
|
||||||
if "prompt" in json_data:
|
if "prompt" in json_data:
|
||||||
prompt = json_data["prompt"]
|
prompt = json_data["prompt"]
|
||||||
prompt_id = str(uuid.uuid4())
|
prompt_id = str(json_data.get("prompt_id", uuid.uuid4()))
|
||||||
valid = await execution.validate_prompt(prompt_id, prompt)
|
valid = await execution.validate_prompt(prompt_id, prompt)
|
||||||
extra_data = {}
|
extra_data = {}
|
||||||
if "extra_data" in json_data:
|
if "extra_data" in json_data:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user