v2.3: CRITICAL FIX - logger initialization order + debug size checks
Browse files
app.py
CHANGED
|
@@ -14,8 +14,6 @@ try:
|
|
| 14 |
SPACES_AVAILABLE = True
|
| 15 |
except ImportError:
|
| 16 |
SPACES_AVAILABLE = False
|
| 17 |
-
logger = logging.getLogger(__name__)
|
| 18 |
-
logger.warning("⚠️ spaces module not available - running without ZeroGPU support")
|
| 19 |
|
| 20 |
from diffusers import (
|
| 21 |
DiffusionPipeline,
|
|
@@ -41,6 +39,10 @@ logging.basicConfig(
|
|
| 41 |
)
|
| 42 |
logger = logging.getLogger(__name__)
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
def get_logs():
|
| 45 |
"""Получить накопленные логи"""
|
| 46 |
return log_buffer.getvalue()
|
|
@@ -485,9 +487,12 @@ def generate_img2img(
|
|
| 485 |
logger.error("[ERROR] Входное изображение отсутствует!")
|
| 486 |
raise gr.Error("Please upload an input image")
|
| 487 |
|
| 488 |
-
|
|
|
|
|
|
|
| 489 |
logger.info(f"[INPUT] Формат: {input_image.format if hasattr(input_image, 'format') else 'N/A'}")
|
| 490 |
logger.info(f"[INPUT] Режим: {input_image.mode}")
|
|
|
|
| 491 |
|
| 492 |
# Генерация seed
|
| 493 |
if randomize_seed:
|
|
@@ -542,9 +547,10 @@ def generate_img2img(
|
|
| 542 |
generator = torch.Generator(device=device).manual_seed(seed)
|
| 543 |
logger.info(f"[I2I STAGE 3/4] ✓ Generator готов на устройстве: {device}")
|
| 544 |
|
| 545 |
-
#
|
| 546 |
img_width, img_height = resized.size
|
| 547 |
logger.info(f"[I2I STAGE 3/4] Финальное разрешение для генерации: {img_width}×{img_height}")
|
|
|
|
| 548 |
|
| 549 |
# Генерация изображения
|
| 550 |
logger.info(f"[I2I STAGE 4/4] Начало генерации изображения...")
|
|
@@ -552,6 +558,7 @@ def generate_img2img(
|
|
| 552 |
effective_steps = int(num_inference_steps * strength)
|
| 553 |
logger.info(f"[I2I STAGE 4/4] Реальных шагов денойзинга: {effective_steps}")
|
| 554 |
logger.info(f"[I2I STAGE 4/4] Ожидаемое время: ~{effective_steps * 0.9:.1f}s")
|
|
|
|
| 555 |
gen_start = time.time()
|
| 556 |
|
| 557 |
image = pipe_img2img(
|
|
@@ -567,6 +574,20 @@ def generate_img2img(
|
|
| 567 |
).images[0]
|
| 568 |
|
| 569 |
gen_time = time.time() - gen_start
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 570 |
logger.info(f"[I2I STAGE 4/4] ✓ Изображение сгенерировано за {gen_time:.2f}s")
|
| 571 |
logger.info(f"[I2I STAGE 4/4] Скорость: {gen_time/effective_steps:.3f}s на шаг")
|
| 572 |
|
|
|
|
| 14 |
SPACES_AVAILABLE = True
|
| 15 |
except ImportError:
|
| 16 |
SPACES_AVAILABLE = False
|
|
|
|
|
|
|
| 17 |
|
| 18 |
from diffusers import (
|
| 19 |
DiffusionPipeline,
|
|
|
|
| 39 |
)
|
| 40 |
logger = logging.getLogger(__name__)
|
| 41 |
|
| 42 |
+
# Логируем если spaces не доступен
|
| 43 |
+
if not SPACES_AVAILABLE:
|
| 44 |
+
logger.warning("⚠️ spaces module not available - running without ZeroGPU support")
|
| 45 |
+
|
| 46 |
def get_logs():
|
| 47 |
"""Получить накопленные логи"""
|
| 48 |
return log_buffer.getvalue()
|
|
|
|
| 487 |
logger.error("[ERROR] Входное изображение отсутствует!")
|
| 488 |
raise gr.Error("Please upload an input image")
|
| 489 |
|
| 490 |
+
# КРИТИЧНО: Сохраняем оригинальные размеры ДО любых преобразований
|
| 491 |
+
original_width, original_height = input_image.size
|
| 492 |
+
logger.info(f"[INPUT] ОРИГИНАЛЬНОЕ изображение: {original_width}×{original_height}")
|
| 493 |
logger.info(f"[INPUT] Формат: {input_image.format if hasattr(input_image, 'format') else 'N/A'}")
|
| 494 |
logger.info(f"[INPUT] Режим: {input_image.mode}")
|
| 495 |
+
logger.info(f"[INPUT] Соотношение сторон: {original_width/original_height:.3f}")
|
| 496 |
|
| 497 |
# Генерация seed
|
| 498 |
if randomize_seed:
|
|
|
|
| 547 |
generator = torch.Generator(device=device).manual_seed(seed)
|
| 548 |
logger.info(f"[I2I STAGE 3/4] ✓ Generator готов на устройстве: {device}")
|
| 549 |
|
| 550 |
+
# КРИТИЧНО: Передаем width и height явно, иначе пайплайн использует дефолтные 1024x1024!
|
| 551 |
img_width, img_height = resized.size
|
| 552 |
logger.info(f"[I2I STAGE 3/4] Финальное разрешение для генерации: {img_width}×{img_height}")
|
| 553 |
+
logger.info(f"[I2I STAGE 3/4] Соотношение сторон: {img_width/img_height:.3f}")
|
| 554 |
|
| 555 |
# Генерация изображения
|
| 556 |
logger.info(f"[I2I STAGE 4/4] Начало генерации изображения...")
|
|
|
|
| 558 |
effective_steps = int(num_inference_steps * strength)
|
| 559 |
logger.info(f"[I2I STAGE 4/4] Реальных шагов денойзинга: {effective_steps}")
|
| 560 |
logger.info(f"[I2I STAGE 4/4] Ожидаемое время: ~{effective_steps * 0.9:.1f}s")
|
| 561 |
+
logger.info(f"[DEBUG] 🔍 ПЕРЕДАЕМ В PIPELINE: width={img_width}, height={img_height}")
|
| 562 |
gen_start = time.time()
|
| 563 |
|
| 564 |
image = pipe_img2img(
|
|
|
|
| 574 |
).images[0]
|
| 575 |
|
| 576 |
gen_time = time.time() - gen_start
|
| 577 |
+
|
| 578 |
+
# КРИТИЧНО: Проверяем финальный размер результата
|
| 579 |
+
final_width, final_height = image.size
|
| 580 |
+
logger.info(f"[DEBUG] 🔍 ПОЛУЧИЛИ ИЗ PIPELINE: width={final_width}, height={final_height}")
|
| 581 |
+
|
| 582 |
+
if final_width != img_width or final_height != img_height:
|
| 583 |
+
logger.error(f"[BUG] ⚠️⚠️⚠️ РАЗМЕР ИЗМЕНИЛСЯ! ⚠️⚠️⚠️")
|
| 584 |
+
logger.error(f"[BUG] Ожидалось: {img_width}×{img_height}")
|
| 585 |
+
logger.error(f"[BUG] Получено: {final_width}×{final_height}")
|
| 586 |
+
logger.error(f"[BUG] Соотношение: {final_width/final_height:.3f}")
|
| 587 |
+
logger.error(f"[BUG] Это указывает на проблему в pipeline или diffusers!")
|
| 588 |
+
else:
|
| 589 |
+
logger.info(f"[I2I STAGE 4/4] ✓ Размер результата корректен: {final_width}×{final_height}")
|
| 590 |
+
|
| 591 |
logger.info(f"[I2I STAGE 4/4] ✓ Изображение сгенерировано за {gen_time:.2f}s")
|
| 592 |
logger.info(f"[I2I STAGE 4/4] Скорость: {gen_time/effective_steps:.3f}s на шаг")
|
| 593 |
|