dikdimon commited on
Commit
fa85833
·
verified ·
1 Parent(s): ccb9482

Update asymmetric-tiling-sd-webui-3.0/scripts/asymmetric_tiling_UNIFIED.py

Browse files
asymmetric-tiling-sd-webui-3.0/scripts/asymmetric_tiling_UNIFIED.py CHANGED
@@ -1793,57 +1793,61 @@ def custom_padding_forward(input_tensor, weight, bias, stride, padding, dilation
1793
  else:
1794
  req_pad_h = req_pad_w = 0
1795
 
1796
- # ===== ШАГ 5: Применяем тайлинг-специфичный padding =====
1797
- # (Здесь должна быть оригинальная логика из custom_padding_forward)
1798
- # Для примера упрощенная версия:
1799
-
1800
- mode_x = params.get('mode_x', 'Default (Off)')
1801
- mode_y = params.get('mode_y', 'Default (Off)')
1802
-
1803
- # Проверяем zoom mode
1804
- if params.get('use_zoom', False):
1805
- # Применяем zoom (упрощенно - нужна полная реализация)
1806
- x = F.pad(input_tensor, (req_pad_w, req_pad_w, req_pad_h, req_pad_h), mode='replicate')
1807
- else:
1808
- # Стандартные режимы
1809
- x = input_tensor
1810
-
1811
- # Ось Y
1812
- if mode_y == 'Circular':
1813
- x = F.pad(x, (0, 0, req_pad_h, req_pad_h), mode='circular')
1814
- elif mode_y == 'Mirror (Reflect)':
1815
- x = F.pad(x, (0, 0, req_pad_h, req_pad_h), mode='reflect')
1816
- else:
1817
- x = F.pad(x, (0, 0, req_pad_h, req_pad_h), mode='constant', value=0)
1818
-
1819
- # Ось X
1820
- if mode_x == 'Circular':
1821
- x = F.pad(x, (req_pad_w, req_pad_w, 0, 0), mode='circular')
1822
- elif mode_x == 'Mirror (Reflect)':
1823
- x = F.pad(x, (req_pad_w, req_pad_w, 0, 0), mode='reflect')
1824
- else:
1825
- x = F.pad(x, (req_pad_w, req_pad_w, 0, 0), mode='constant', value=0)
1826
-
1827
- # ===== ШАГ 6: Применяем свертку с нулевым padding (т.к. уже добавили) =====
1828
- output = F.conv2d(x, weight, bias, stride, 0, dilation, groups)
1829
 
1830
- # ===== ШАГ 7: КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ - Корректируем размеры выхода =====
1831
- output = ensure_output_size_match(output, expected_out_h, expected_out_w)
1832
 
1833
- return output
1834
-
1835
- except Exception as e:
1836
- print(f"[Advanced Tiling] Error in custom_padding_forward_FIXED: {e}")
1837
- import traceback
1838
- traceback.print_exc()
1839
- # Fallback к стандартной свертке
1840
- return F.conv2d(input_tensor, weight, bias, stride, padding, dilation, groups)
1841
-
1842
  # ═══════════════════════════════════════════════════════════════════
1843
- # СПЕЦИАЛЬНЫЕ РЕЖИМЫ (Cubemap, Panorama) - используют свои функции
1844
  # ═══════════════════════════════════════════════════════════════════
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1845
 
1846
- # ────────── CUBEMAP ──────────
1847
  if mode_x == MODE_CUBEMAP or mode_y == MODE_CUBEMAP:
1848
  cubemap_engine = params.get('cubemap_engine', 'A (Fast)')
1849
  cubemap_pad_mode = params.get('cubemap_pad_mode', 'replicate')
@@ -1916,6 +1920,8 @@ def custom_padding_forward(input_tensor, weight, bias, stride, padding, dilation
1916
  enabled=True
1917
  )
1918
 
 
 
1919
  return out_cube
1920
 
1921
  # ────────── PANORAMA ──────────
@@ -1985,6 +1991,8 @@ def custom_padding_forward(input_tensor, weight, bias, stride, padding, dilation
1985
  enabled=True
1986
  )
1987
 
 
 
1988
  return out_pano
1989
 
1990
  # Engine B: fast pole-correct padding
@@ -2027,6 +2035,8 @@ def custom_padding_forward(input_tensor, weight, bias, stride, padding, dilation
2027
  enabled=True
2028
  )
2029
 
 
 
2030
  return out_pano
2031
 
2032
  # Engine A (legacy): simple circular wrap
@@ -2057,6 +2067,8 @@ def custom_padding_forward(input_tensor, weight, bias, stride, padding, dilation
2057
  enabled=True
2058
  )
2059
 
 
 
2060
  return out_pano
2061
 
2062
  # ═══════════════════════════════════════════════════════════════════
@@ -2167,8 +2179,12 @@ def custom_padding_forward(input_tensor, weight, bias, stride, padding, dilation
2167
  enabled=True
2168
  )
2169
 
 
 
2170
  return out_final # ← ИСПРАВЛЕНО: возвращаем с multires!
2171
  else:
 
 
2172
  return out_advanced # ← Без multires
2173
 
2174
  except Exception as e:
 
1793
  else:
1794
  req_pad_h = req_pad_w = 0
1795
 
1796
+ # FIX V3.7: Не выходим рано, если включен ZOOM!
1797
+ if req_pad_h == 0 and req_pad_w == 0 and not params.get('use_zoom', False):
1798
+ return F.conv2d(input_tensor, weight, bias, stride, padding, dilation, groups)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1799
 
1800
+ mode_x = params.get('mode_x', MODE_OFF)
1801
+ mode_y = params.get('mode_y', MODE_OFF)
1802
 
 
 
 
 
 
 
 
 
 
1803
  # ═══════════════════════════════════════════════════════════════════
1804
+ # ZOOM SYSTEM - обрабатываем первым, т.к. может комбинироваться с другими режимами
1805
  # ═══════════════════════════════════════════════════════════════════
1806
+ if params.get('use_zoom', False):
1807
+ try:
1808
+ from advanced_zoom_extension import apply_unified_zoom, validate_zoom_params
1809
+
1810
+ raw_zoom_params = {
1811
+ 'zoom_factor': params.get('zoom_factor', 0.0),
1812
+ 'zoom_mode': params.get('zoom_mode', ZoomMode.UNIFORM),
1813
+ 'blend_mode': params.get('zoom_blend_mode', BlendMode.SMOOTH),
1814
+ 'center_x': params.get('zoom_center_x', 0.5),
1815
+ 'center_y': params.get('zoom_center_y', 0.5),
1816
+ 'aspect_ratio_x': params.get('zoom_aspect_ratio_x', 1.0),
1817
+ 'aspect_ratio_y': params.get('zoom_aspect_ratio_y', 1.0),
1818
+ 'rotation_degrees': params.get('zoom_rotation_degrees', 0.0),
1819
+ 'perspective_strength': params.get('zoom_perspective_strength', 0.0),
1820
+ 'perspective_angle_x': params.get('zoom_perspective_angle_x', 0.0),
1821
+ 'perspective_angle_y': params.get('zoom_perspective_angle_y', 0.0),
1822
+ 'blend_width_ratio': params.get('zoom_blend_width_ratio', 0.1),
1823
+ 'blend_strength': params.get('zoom_blend_strength', 1.0),
1824
+ 'warp_strength': params.get('zoom_warp_strength', 0.0),
1825
+ 'warp_frequency': params.get('zoom_warp_frequency', 2.0),
1826
+ 'use_adaptive_blend': params.get('zoom_use_adaptive_blend', False),
1827
+ 'edge_threshold': params.get('zoom_edge_threshold', 0.1),
1828
+ }
1829
+
1830
+ zoom_params = validate_zoom_params(raw_zoom_params)
1831
+
1832
+ x = apply_unified_zoom(
1833
+ input_tensor,
1834
+ pad_h=req_pad_h,
1835
+ pad_w=req_pad_w,
1836
+ **zoom_params
1837
+ )
1838
+
1839
+ output = F.conv2d(x, weight, bias, stride, (0, 0), dilation, groups)
1840
+
1841
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
1842
+ output = ensure_output_size_match(output, expected_out_h, expected_out_w)
1843
+ return output
1844
+
1845
+ except Exception as e:
1846
+ print(f"⚠ Zoom Error: {e}")
1847
+ import traceback
1848
+ traceback.print_exc()
1849
+ return F.conv2d(input_tensor, weight, bias, stride, padding, dilation, groups)
1850
 
 
1851
  if mode_x == MODE_CUBEMAP or mode_y == MODE_CUBEMAP:
1852
  cubemap_engine = params.get('cubemap_engine', 'A (Fast)')
1853
  cubemap_pad_mode = params.get('cubemap_pad_mode', 'replicate')
 
1920
  enabled=True
1921
  )
1922
 
1923
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
1924
+ out_cube = ensure_output_size_match(out_cube, expected_out_h, expected_out_w)
1925
  return out_cube
1926
 
1927
  # ────────── PANORAMA ──────────
 
1991
  enabled=True
1992
  )
1993
 
1994
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
1995
+ out_pano = ensure_output_size_match(out_pano, expected_out_h, expected_out_w)
1996
  return out_pano
1997
 
1998
  # Engine B: fast pole-correct padding
 
2035
  enabled=True
2036
  )
2037
 
2038
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
2039
+ out_pano = ensure_output_size_match(out_pano, expected_out_h, expected_out_w)
2040
  return out_pano
2041
 
2042
  # Engine A (legacy): simple circular wrap
 
2067
  enabled=True
2068
  )
2069
 
2070
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
2071
+ out_pano = ensure_output_size_match(out_pano, expected_out_h, expected_out_w)
2072
  return out_pano
2073
 
2074
  # ═══════════════════════════════════════════════════════════════════
 
2179
  enabled=True
2180
  )
2181
 
2182
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
2183
+ out_final = ensure_output_size_match(out_final, expected_out_h, expected_out_w)
2184
  return out_final # ← ИСПРАВЛЕНО: возвращаем с multires!
2185
  else:
2186
+ # ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: корректируем размеры
2187
+ out_advanced = ensure_output_size_match(out_advanced, expected_out_h, expected_out_w)
2188
  return out_advanced # ← Без multires
2189
 
2190
  except Exception as e: