Initial release: Comfy-Studio v1.0.0
Десктопная галерея и менеджер изображений ComfyUI (PyQt6 + SQLite): - мультипапочный мониторинг (watchdog), грид миниатюр, drag-and-drop - теги, избранное, рейтинг, поиск по промтам - парсер метаданных ComfyUI (PNG/WebP/JPEG), редактор workflow/prompt JSON - перевод выделенного текста через контекстное меню (настраиваемые языки) - отправка промта в очередь ComfyUI с внедрением правок и нового seed - полноэкранный просмотр, локализация ru/en, тёмная тема Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Comfy-Studio — галерея и менеджер изображений, сгенерированных в ComfyUI.
|
||||
Точка входа: логирование, БД, вотчер папок, запуск GUI.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
# Корень проекта в путях поиска модулей
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from PyQt6.QtWidgets import QApplication
|
||||
from PyQt6.QtCore import Qt
|
||||
|
||||
from comfy_studio.core.config import APP_NAME, DB_PATH, LOG_PATH, LOGGING_LEVEL
|
||||
from comfy_studio.core.settings import load_settings
|
||||
from comfy_studio.core.i18n import set_language
|
||||
from comfy_studio.db.manager import DBManager
|
||||
from comfy_studio.services.watcher import FolderWatcher
|
||||
|
||||
|
||||
def configure_logging() -> None:
|
||||
logging.basicConfig(
|
||||
level=getattr(logging, LOGGING_LEVEL.upper(), logging.INFO),
|
||||
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
||||
datefmt="%Y-%m-%d %H:%M:%S",
|
||||
handlers=[
|
||||
logging.FileHandler(str(LOG_PATH), encoding="utf-8"),
|
||||
logging.StreamHandler(sys.stdout),
|
||||
],
|
||||
)
|
||||
logging.getLogger("PIL").setLevel(logging.WARNING)
|
||||
logging.getLogger("watchdog").setLevel(logging.INFO)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
configure_logging()
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.info(f"{APP_NAME} запускается...")
|
||||
|
||||
# Настройки и язык (до создания UI!)
|
||||
settings = load_settings()
|
||||
set_language(settings.get("language", "ru"))
|
||||
|
||||
# База данных
|
||||
try:
|
||||
db_manager = DBManager(str(DB_PATH))
|
||||
logger.info(f"База данных готова: {DB_PATH}")
|
||||
except Exception as e:
|
||||
logger.critical(f"Не удалось инициализировать БД: {e}")
|
||||
return 1
|
||||
|
||||
# Гарантируем существование отслеживаемых папок
|
||||
tracked_paths = settings.get("tracked_paths", [])
|
||||
for path_str in tracked_paths:
|
||||
Path(path_str).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Фоновый вотчер
|
||||
watcher = FolderWatcher(db_manager)
|
||||
watcher.start_monitoring(tracked_paths)
|
||||
|
||||
# High DPI (до создания QApplication)
|
||||
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
||||
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
|
||||
)
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
app.setApplicationName(APP_NAME)
|
||||
app.setStyle("Fusion")
|
||||
|
||||
# Импорт окна после создания QApplication
|
||||
from comfy_studio.ui.main_window import MainWindow
|
||||
|
||||
window = MainWindow(db_manager, watcher)
|
||||
|
||||
if tracked_paths:
|
||||
window.left_panel.set_root_path(tracked_paths[0])
|
||||
window.load_folder_images(tracked_paths[0])
|
||||
|
||||
window.show()
|
||||
logger.info("UI запущен.")
|
||||
|
||||
try:
|
||||
exit_code = app.exec()
|
||||
finally:
|
||||
watcher.stop_monitoring()
|
||||
logger.info(f"{APP_NAME} завершён.")
|
||||
|
||||
return exit_code
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user