| | --- |
| | title: Qwen Soloband Advanced - Image2Image + LoRA |
| | emoji: 🎨 |
| | colorFrom: blue |
| | colorTo: purple |
| | sdk: gradio |
| | sdk_version: "5.9.1" |
| | app_file: app.py |
| | pinned: true |
| | license: apache-2.0 |
| | suggested_hardware: a10g-large |
| | suggested_storage: medium |
| | models: |
| | - Gerchegg/Qwen-Soloband-Diffusers |
| | tags: |
| | - image-generation |
| | - image-to-image |
| | - lora |
| | - qwen |
| | - diffusers |
| | short_description: Text2Image and Image2Image with LoRA support |
| | preload_from_hub: |
| | - Gerchegg/Qwen-Soloband-Diffusers |
| | --- |
| | |
| | # 🎨 Qwen Soloband Advanced |
| |
|
| | **Комплексная система генерации изображений** на базе Qwen-Image DiT с полным набором инструментов для профессиональной работы. |
| |
|
| | ## 🆕 Что нового в версии 2.0 |
| |
|
| | - ⚙️ **10+ Schedulers/Samplers** - Выбор алгоритма генерации (DPM++, Euler, UniPC и др.) |
| | - 🎯 **Поддержка алиасов** - Короткие имена для API (`dpmpp_2m_karras`, `euler_a`) |
| | - 🔧 **Кастомные модели** - Задавайте MODEL_REPO через переменную окружения |
| | - 📦 **RunPod скрипты** - Автоматическая установка одной командой |
| | - 📚 **Улучшенная документация** - Полное руководство по развертыванию |
| | |
| | ## 🚀 Основные возможности |
| | |
| | ### 📝 Text-to-Image |
| | Генерация изображений из текстовых описаний: |
| | - 🎨 Кастомная fine-tuned модель Qwen-Soloband |
| | - 📐 Разрешения от 512×512 до 2048×2048 |
| | - ⚙️ Полный контроль параметров (steps, CFG, seed) |
| | - 🎯 Оптимизированные настройки для лучшего качества |
| | |
| | ### 🔄 Image-to-Image |
| | Модификация и трансформация существующих изображений: |
| | - 🖼️ Загрузка любых изображений (PNG, JPG, WebP) |
| | - 🎚️ **Denoising Strength** (0.0-1.0) - точный контроль степени изменения |
| | - 🎨 Сохранение структуры при изменении стиля |
| | - ✨ Улучшение качества, стилизация, художественная трансформация |
| | |
| | ### 🎭 LoRA Styles |
| | Динамическая загрузка стилей для разнообразия: |
| | - 📸 **Realism** - фотореалистичные изображения |
| | - 🎌 **Anime** - современный японский стиль аниме |
| | - 🎚️ **LoRA Scale** (0.0-2.0) - интенсивность стиля |
| | - 📁 **Локальные LoRA** - Загрузка из `/workspace/loras/` |
| | |
| | --- |
| | |
| | ## 🚀 Quick Start на RunPod |
| | |
| | ### Одна команда - полная установка: |
| | |
| | ```bash |
| | export HF_HUB_ENABLE_HF_TRANSFER=0 && \ |
| | pip install -q huggingface_hub[cli] && \ |
| | hf auth login --token ВАШ_ТОКЕН && \ |
| | cd /workspace && \ |
| | hf download Gerchegg/Qwen-ImageForFlo-Advanced --repo-type space --local-dir Qwen-ImageForFlo-Advanced && \ |
| | cd Qwen-ImageForFlo-Advanced && \ |
| | pip install -r requirements.txt && \ |
| | python app.py |
| | ``` |
| | |
| | **📖 Полная инструкция:** См. [RUNPOD_DEPLOYMENT.md](./RUNPOD_DEPLOYMENT.md) |
| | |
| | ### Или используйте скрипт: |
| | |
| | ```bash |
| | wget https://huggingface.co/spaces/Gerchegg/Qwen-ImageForFlo-Advanced/resolve/main/quick_start.sh |
| | chmod +x quick_start.sh |
| | HF_TOKEN="ВАШ_ТОКЕН" ./quick_start.sh |
| | ``` |
| | |
| | --- |
| | |
| | ## 🔌 API Usage |
| | |
| | ### Text-to-Image API |
| | |
| | ```python |
| | from gradio_client import Client |
| | |
| | client = Client("Gerchegg/Qwen-ImageForFlo-Advanced") |
| | |
| | result = client.predict( |
| | prompt="SB_AI, a beautiful landscape", |
| | negative_prompt="blurry, low quality", |
| | width=1664, |
| | height=928, |
| | seed=42, |
| | randomize_seed=False, |
| | guidance_scale=2.5, |
| | num_inference_steps=40, |
| | lora_name="None", # или "Realism", "Anime" |
| | lora_scale=1.0, |
| | scheduler_name="DPM++ 2M Karras", # 🆕 Выбор scheduler/sampler |
| | api_name="/text2img" |
| | ) |
| | |
| | image, seed = result |
| | ``` |
| | |
| | ### Image-to-Image API |
| | |
| | ```python |
| | result = client.predict( |
| | input_image="path/to/image.png", # PIL Image или path |
| | prompt="Transform this into a painting", |
| | negative_prompt="blurry, low quality", |
| | strength=0.75, # 0.0-1.0, больше = сильнее изменение |
| | seed=42, |
| | randomize_seed=False, |
| | guidance_scale=2.5, |
| | num_inference_steps=40, |
| | lora_name="None", |
| | lora_scale=1.0, |
| | scheduler_name="Euler Ancestral", # 🆕 Выбор scheduler/sampler |
| | api_name="/img2img" |
| | ) |
| | |
| | image, seed = result |
| | ``` |
| | |
| | |
| | ## 💡 Примеры использования |
| | |
| | ### Text-to-Image |
| | ``` |
| | Prompt: "SB_AI, a beautiful mountain landscape at sunset, detailed" |
| | Size: 1664×928 |
| | Steps: 40, CFG: 2.5 |
| | LoRA: None |
| | ``` |
| | |
| | ### Image-to-Image |
| | ``` |
| | Input: фото человека |
| | Prompt: "Transform into oil painting style" |
| | Strength: 0.75 (сохранить структуру, изменить стиль) |
| | LoRA: Analog Film |
| | ``` |
| | |
| | |
| | ## 🎛️ Доступные Schedulers (Samplers) |
| | |
| | ⚠️ **Важно:** Qwen-Image использует **Flow Matching**, а не классическую diffusion! |
| | Работают только **FlowMatchEulerDiscreteScheduler** с различными параметрами shift. |
| | |
| | ### ✅ Протестированные и рабочие schedulers: |
| | |
| | | Scheduler | Время | Speedup | Алиас | Рекомендация | |
| | |-----------|-------|---------|-------|--------------| |
| | | **Flow Euler (Shift 0.5)** | **33.8s** | **1.00x** | `flow_euler_shift05` | 🥇 **САМЫЙ БЫСТРЫЙ** (по умолчанию) | |
| | | Flow Euler (Shift 2.0) | 34.6s | 1.02x | `flow_euler_shift20` | 🥈 Быстрый + детали | |
| | | Flow Euler (Shift 1.5) | 38.8s | 1.15x | `flow_euler_shift15` | 🥉 Баланс | |
| | | Flow Euler (Default) | 40.2s | 1.19x | `flow_euler` | Стандарт (shift=1.0) | |
| |
|
| | *Время указано для 1024×1024, 40 steps на ZeroGPU* |
| |
|
| | ### Использование |
| |
|
| | **В интерфейсе:** |
| | Выберите в dropdown "Sampler/Scheduler" |
| |
|
| | **В API (полное имя):** |
| | ```python |
| | scheduler_name="Flow Euler (Shift 0.5)" # Самый быстрый! |
| | ``` |
| |
|
| | **В API (алиас):** |
| | ```python |
| | scheduler_name="flow_euler_shift05" # Короткий вариант |
| | ``` |
| |
|
| | **Примеры:** |
| | ```python |
| | # Для быстрой генерации (рекомендуется) |
| | scheduler_name="Flow Euler (Shift 0.5)" |
| | num_inference_steps=40 |
| | # Время: ~34s |
| | |
| | # Для максимума деталей |
| | scheduler_name="Flow Euler (Shift 2.0)" |
| | num_inference_steps=50 |
| | # Время: ~43s |
| | |
| | # Стандартный |
| | scheduler_name="Flow Euler (Default)" |
| | num_inference_steps=40 |
| | # Время: ~40s |
| | ``` |
| |
|
| | ### 📊 Влияние Shift параметра: |
| |
|
| | - **Shift 0.5:** Больше шагов в начале → быстрее |
| | - **Shift 2.0:** Равномернее распределение → детальнее |
| | - **Разница:** 19% между самым быстрым и самым медленным |
| |
|
| | ### 🔬 Почему только Flow Euler? |
| |
|
| | Qwen-Image это **Flow Matching** модель. Pipeline автоматически передает `sigmas` параметр в `scheduler.set_timesteps()`. Только `FlowMatchEulerDiscreteScheduler` полностью совместим с этой архитектурой. |
| |
|
| | **Не работают:** DPM++, обычный Euler, Ancestral, UniPC, DDIM - все это классические diffusion schedulers. |
| |
|
| | --- |
| |
|
| | ## 🎭 Доступные LoRA |
| |
|
| | ### 🌐 HuggingFace Hub LoRA (2 предустановленных): |
| |
|
| | | Name | Trigger Word | Description | |
| | |------|--------------|-------------| |
| | | **Realism** | "Super Realism portrait of" | Фотореалистичные изображения | |
| | | **Anime** | "Japanese modern anime style, " | Современное аниме | |
| |
|
| | 💡 **Ленивая загрузка**: Hub LoRA скачиваются только при использовании, затем кэшируются. |
| |
|
| | ### 📁 Локальные LoRA (рекомендуемый способ): |
| |
|
| | **Положите ваши .safetensors файлы в `/workspace/loras/`** - они автоматически появятся в списке! |
| |
|
| | **Преимущества локальных LoRA**: |
| | - ✅ Не скачиваются с интернета (быстрее) |
| | - ✅ Приватные (только у вас) |
| | - ✅ Полный контроль версий |
| | - ✅ Можно использовать любые кастомные LoRA |
| |
|
| | **Пример**: |
| | ```bash |
| | /workspace/loras/ |
| | ├── my_custom_style.safetensors → появится как "my_custom_style" |
| | ├── portrait_lora.safetensors → появится как "portrait_lora" |
| | └── anime_v2.safetensors → появится как "anime_v2" |
| | ``` |
| |
|
| | **API использование**: |
| | ```python |
| | # Используйте имя файла (без расширения) |
| | result = client.predict( |
| | prompt="SB_AI, a portrait", |
| | lora_name="my_custom_style", # Имя вашего локального файла |
| | lora_scale=1.0, |
| | api_name="/text2img" |
| | ) |
| | ``` |
| |
|
| | 💡 **Hub LoRA** автоматически добавляют trigger words. **Локальные LoRA** - без trigger words. |
| |
|
| | ## 📊 Параметры |
| |
|
| | ### Denoising Strength (Image2Image) |
| | - **0.0-0.3**: Минимальные изменения, сохранение деталей |
| | - **0.4-0.6**: Умеренные изменения, баланс |
| | - **0.7-0.9**: Сильные изменения, новое изображение |
| | - **1.0**: Полная перерисовка |
| |
|
| | ### LoRA Scale |
| | - **0.0**: Без эффекта |
| | - **0.5**: Слабый эффект стиля |
| | - **1.0**: Нормальный эффект (рекомендуется) |
| | - **1.5-2.0**: Сильный эффект стиля |
| |
|
| | ## 🔧 Технические детали |
| |
|
| | ### Модели: |
| | - **Base**: Gerchegg/Qwen-Soloband-Diffusers (по умолчанию) |
| | - **LoRAs**: Различные (загружаются динамически) |
| | - **Custom Models**: Поддержка через переменную окружения `MODEL_REPO` |
| |
|
| | ### Использование кастомной модели: |
| |
|
| | ```bash |
| | # Через переменную окружения |
| | MODEL_REPO="username/custom-qwen-model" python app.py |
| | |
| | # Или экспортировать |
| | export MODEL_REPO="username/custom-qwen-model" |
| | python app.py |
| | ``` |
| |
|
| | **Требования к кастомной модели:** |
| | - Совместимость с Qwen-Image архитектурой |
| | - Формат diffusers |
| | - Включает: vae, text_encoder, tokenizer, transformer, scheduler |
| | |
| | ### Оптимизации: |
| | - VAE tiling для больших изображений |
| | - VAE slicing для batch |
| | - Автоматическое управление LoRA |
| | |
| | ## 💰 Требования |
| | |
| | - **GPU**: A40 (48GB) или A100 (80GB) |
| | - **VRAM**: ~40GB для базовой модели |
| | - **Storage**: ~45GB (модель) |
| | |
| | ## 📚 Дополнительная информация |
| | |
| | - **Base Model**: [Qwen-Soloband-Diffusers](https://huggingface.co/Gerchegg/Qwen-Soloband-Diffusers) |
| | - **Qwen-Image**: [Qwen/Qwen-Image](https://huggingface.co/Qwen/Qwen-Image) |
| | - **Diffusers Docs**: [Image-to-Image Guide](https://huggingface.co/docs/diffusers/using-diffusers/img2img) |
| | - **LoRA Explorer**: [Qwen-Image-LoRA-Explorer](https://huggingface.co/spaces/multimodalart/Qwen-Image-LoRA-Explorer) |
| | |
| | ## ⚠️ Важные замечания |
| | |
| | ### Image2Image для Qwen |
| | Этот Space использует специализированный `QwenImageImg2ImgPipeline` для корректной работы с Qwen-Image архитектурой. В отличие от обычных Stable Diffusion моделей, Qwen-Image требует: |
| | - Специальное кодирование изображений через `AutoencoderKLQwenImage` |
| | - Параметр `true_cfg_scale` вместо `guidance_scale` |
| | - Специальную упаковку латентов (packing 2x2) |
| |
|
| | ### LoRA (Hub + Local) |
| |
|
| | - **Hub LoRA (2)**: Realism, Anime - скачиваются ПРИ ИСПОЛЬЗОВАНИИ, затем кэшируются |
| | - **Local LoRA**: Любые .safetensors в `/workspace/loras/` - автоматически обнаруживаются |
| | - Ленивая загрузка - не скачиваются и не занимают VRAM до использования |
| | - Полная поддержка в API по имени |
| |
|
| | ## 📝 License |
| |
|
| | Apache 2.0 |
| |
|
| | ## 🔧 Technical Notes |
| |
|
| | ✅ **Image2Image**: Использует правильный `QwenImageImg2ImgPipeline` для Qwen-Image архитектуры |
| | ✅ **Performance**: ~0.91s на шаг денойзинга на A100 GPU |
| | ✅ **Optimization**: VAE tiling и slicing включены для экономии памяти |
| |
|
| |
|