refactor: vectorize gradient loop and fix DD node position

Replace per-pixel Python loop with vectorized torch.arange + slice
operations. Fix DifferentialDiffusion node position to avoid visual
overlap with SplitImageToTileList node 14 on the canvas.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-25 16:49:17 +01:00
parent 93b0ac22cd
commit 06b42a610b
2 changed files with 7 additions and 7 deletions

View File

@@ -412,7 +412,7 @@
{ {
"id": 24, "id": 24,
"type": "DifferentialDiffusion", "type": "DifferentialDiffusion",
"pos": [2560, 160], "pos": [2560, 60],
"size": [250, 46], "size": [250, 46],
"flags": {}, "flags": {},
"order": 12, "order": 12,

View File

@@ -60,9 +60,9 @@ class GenerateSeamMask:
center = (ovl_start + ovl_end) // 2 center = (ovl_start + ovl_end) // 2
x_start = max(0, center - half_w) x_start = max(0, center - half_w)
x_end = min(image_width, center + half_w) x_end = min(image_width, center + half_w)
for x in range(x_start, x_end): xs = torch.arange(x_start, x_end, dtype=torch.float32)
val = 1.0 - abs(x - center) / half_w vals = (1.0 - (xs - center).abs() / half_w).view(1, 1, -1, 1)
mask[:, :, x, :] = torch.max(mask[:, :, x, :], torch.tensor(val)) mask[:, :, x_start:x_end, :] = torch.max(mask[:, :, x_start:x_end, :], vals)
# Horizontal seam bands # Horizontal seam bands
for i in range(len(y_tiles) - 1): for i in range(len(y_tiles) - 1):
@@ -71,9 +71,9 @@ class GenerateSeamMask:
center = (ovl_start + ovl_end) // 2 center = (ovl_start + ovl_end) // 2
y_start = max(0, center - half_w) y_start = max(0, center - half_w)
y_end = min(image_height, center + half_w) y_end = min(image_height, center + half_w)
for y in range(y_start, y_end): ys = torch.arange(y_start, y_end, dtype=torch.float32)
val = 1.0 - abs(y - center) / half_w vals = (1.0 - (ys - center).abs() / half_w).view(1, -1, 1, 1)
mask[:, y, :, :] = torch.max(mask[:, y, :, :], torch.tensor(val)) mask[:, y_start:y_end, :, :] = torch.max(mask[:, y_start:y_end, :, :], vals)
else: else:
# Binary mode (original behavior) # Binary mode (original behavior)
for i in range(len(x_tiles) - 1): for i in range(len(x_tiles) - 1):