# ICLight

Пересветите любое изображение с помощью управления освещением на базе ИИ.

{% hint style="success" %}
Все примеры можно запустить на GPU-серверах, арендуемых через [CLORE.AI Маркетплейс](https://clore.ai/marketplace).
{% endhint %}

{% hint style="info" %}
Все примеры в этом руководстве можно запустить на GPU-серверах, арендуемых через [CLORE.AI Маркетплейс](https://clore.ai/marketplace) маркетплейс.
{% endhint %}

## Аренда на CLORE.AI

1. Посетите [CLORE.AI Маркетплейс](https://clore.ai/marketplace)
2. Фильтруйте по типу GPU, объёму VRAM и цене
3. Выберите **По запросу** (фиксированная ставка) или **Спот** (цена заявки)
4. Настройте заказ:
   * Выберите Docker-образ
   * Установите порты (TCP для SSH, HTTP для веб-интерфейсов)
   * При необходимости добавьте переменные окружения
   * Введите команду запуска
5. Выберите способ оплаты: **CLORE**, **BTC**, или **USDT/USDC**
6. Создайте заказ и дождитесь развертывания

### Доступ к вашему серверу

* Найдите данные для подключения в **Мои заказы**
* Веб-интерфейсы: используйте URL HTTP-порта
* SSH: `ssh -p <порт> root@<proxy-address>`

## Что такое IC-Light?

IC-Light от lllyasviel позволяет:

* Пересвечивать изображения с помощью текстовых описаний
* Менять направление и цвет освещения
* Добавлять или убирать тени
* Создавать студийные световые эффекты
* Пересвет переднего/заднего плана

## Ресурсы

* **GitHub:** [lllyasviel/IC-Light](https://github.com/lllyasviel/IC-Light)
* **HuggingFace:** [lllyasviel/IC-Light](https://huggingface.co/lllyasviel/IC-Light)
* **Демо:** [HuggingFace Space](https://huggingface.co/spaces/lllyasviel/IC-Light)
* **Статья:** Основано на архитектуре ControlNet

## Рекомендованное оборудование

| Компонент | Минимум       | Рекомендуется | Оптимально    |
| --------- | ------------- | ------------- | ------------- |
| GPU       | RTX 3060 12GB | RTX 4080 16GB | RTX 4090 24GB |
| VRAM      | 8GB           | 12GB          | 16GB          |
| CPU       | 4 ядра        | 8 ядер        | 16 ядер       |
| ОЗУ       | 16GB          | 32GB          | 64GB          |
| Хранилище | 30GB SSD      | 50GB NVMe     | 100GB NVMe    |
| Интернет  | 100 Мбит/с    | 500 Мбит/с    | 1 Гбит/с      |

## Быстрое развертывание на CLORE.AI

**Docker-образ:**

```
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
```

**Порты:**

```
22/tcp
7860/http
```

**Команда:**

```bash
cd /workspace && \
git clone https://github.com/lllyasviel/IC-Light.git && \
cd IC-Light && \
pip install -r requirements.txt && \
python gradio_demo.py
```

## Доступ к вашему сервису

После развертывания найдите ваш `http_pub` URL в **Мои заказы**:

1. Перейдите на **Мои заказы** страницу
2. Нажмите на ваш заказ
3. Найдите `http_pub` URL (например, `abc123.clorecloud.net`)

Используйте `https://YOUR_HTTP_PUB_URL` вместо `localhost` в примерах ниже.

## Установка

```bash
git clone https://github.com/lllyasviel/IC-Light.git
cd IC-Light
pip install -r requirements.txt

# Модели скачиваются автоматически при первом запуске
```

## Что вы можете создать

### Предметная фотография

* Идеальное освещение для электронной коммерции
* Единообразные изображения каталога
* Результаты студийного качества без студии

### Улучшение портретов

* Исправление плохого освещения на фотографиях
* Добавление драматических световых эффектов
* Создание профессиональных портретов

### Творческие проекты

* Изменение настроения
* Преобразование дня в ночь
* Художественные световые эффекты

### Видеопроизводство

* Согласование освещения между сценами
* Создание материалов, готовых для VFX
* Исправление проблем освещения на локации

### Маркетинговые материалы

* Создание главного изображения
* Единый фирменный стиль изображений
* Быстрая ретушь фотографий

## Базовое использование

### Пересвет переднего плана (режим FC)

Пересветите объект при сохранении фона:

```python
import torch
from PIL import Image
from diffusers import StableDiffusionPipeline
from ic_light import ICLightFC

# Загрузить модель
model = ICLightFC.from_pretrained("lllyasviel/IC-Light-FC")
model.to("cuda")

# Загрузить изображение
image = Image.open("portrait.jpg")

# Пересвет с текстовым запросом
result = model.relight(
    image=image,
    prompt="золотой час солнечного света слева",
    num_inference_steps=25
)

result.save("relit_portrait.jpg")
```

### Условный фон (режим FBC)

Пересвет переднего плана для соответствия новому фону:

```python
from ic_light import ICLightFBC
from PIL import Image

model = ICLightFBC.from_pretrained("lllyasviel/IC-Light-FBC")
model.to("cuda")

# Загрузить передний план и новый фон
foreground = Image.open("person.png")  # С прозрачным фоном
background = Image.open("sunset_scene.jpg")

# Пересвет для соответствия фону
result = model.relight(
    foreground=foreground,
    background=background,
    prompt="тёплое закатное освещение",
    num_inference_steps=25
)

result.save("composited.jpg")
```

## Запросы по освещению

### Освещение по направлению

```python
prompts = [
    "яркий свет с левой стороны",
    "мягкий свет сверху",
    "драматический контровой свет сзади",
    "каймовое освещение справа",
    "фронтальный рассеянный свет",
    "низкоугловой свет снизу"
]
```

### Освещение по цвету

```python
prompts = [
    "тёплый золотой солнечный свет",
    "прохладный синий сумеречный свет",
    "неоново-розовый свет",
    "зелёный фоновой свет",
    "оранжевое закатное свечение",
    "белое студийное освещение"
]
```

### Освещение по окружающей среде

```python
prompts = [
    "дневной свет на улице, яркое солнце",
    "внутренний свет из окна, мягкие тени",
    "ночные городские огни, неоновые отражения",
    "свет свечи, тёплое мерцание",
    "пасмурный день, рассеянное освещение",
    "студийный софтбокс, профессионально"
]
```

## Пакетная обработка

```python
import os
from PIL import Image
from ic_light import ICLightFC

model = ICLightFC.from_pretrained("lllyasviel/IC-Light-FC")
model.to("cuda")

input_dir = "./images"
output_dir = "./relit"
os.makedirs(output_dir, exist_ok=True)

lighting_prompt = "профессиональное студийное освещение, мягкие тени"

for filename in os.listdir(input_dir):
    if not filename.endswith(('.jpg', '.png')):
        continue

    image = Image.open(os.path.join(input_dir, filename))

    result = model.relight(
        image=image,
        prompt=lighting_prompt,
        num_inference_steps=25
    )

    result.save(os.path.join(output_dir, f"relit_{filename}"))
    print(f"Обработано: {filename}")
```

## Несколько вариантов освещения

```python
from ic_light import ICLightFC
from PIL import Image
import os

model = ICLightFC.from_pretrained("lllyasviel/IC-Light-FC")
model.to("cuda")

image = Image.open("product.jpg")

lighting_variations = {
    "daylight": "яркий естественный дневной свет, чистый белый фон",
    "dramatic": "драматическое боковое освещение, тёмные тени",
    "warm": "тёплый золотой час, мягкое оранжевое свечение",
    "cool": "прохладное синее освещение, современная эстетика",
    "studio": "профессиональный студийный софтбокс, ровное освещение"
}

os.makedirs("./variations", exist_ok=True)

for name, prompt in lighting_variations.items():
    result = model.relight(
        image=image,
        prompt=prompt,
        num_inference_steps=25
    )
    result.save(f"./variations/{name}.jpg")
    print(f"Создано: {name}")
```

## Интерфейс Gradio

```python
import gradio as gr
from PIL import Image
from ic_light import ICLightFC

model = ICLightFC.from_pretrained("lllyasviel/IC-Light-FC")
model.to("cuda")

def relight_image(image, prompt, steps, seed):
    generator = torch.Generator("cuda").manual_seed(seed) if seed > 0 else None

    result = model.relight(
        image=image,
        prompt=prompt,
        num_inference_steps=steps,
        generator=generator
    )

    return result

demo = gr.Interface(
    fn=relight_image,
    inputs=[
        gr.Image(type="pil", label="Входное изображение"),
        gr.Textbox(
            label="Запрос по освещению",
            value="профессиональное студийное освещение",
            placeholder="Опишите желаемое освещение..."
        ),
        gr.Slider(10, 50, value=25, step=5, label="Шаги"),
        gr.Number(value=-1, label="Seed (-1 для случайного)")
    ],
    outputs=gr.Image(label="Пересвеченное изображение"),
    title="IC-Light - AI Image Relighting",
    description="Изменяйте освещение на любом изображении с помощью текстовых описаний. Запуск на GPU-серверах CLORE.AI.",
    examples=[
        ["example.jpg", "золотой час солнечного света слева", 25, -1],
        ["example.jpg", "драматичное каймовое освещение, тёмный фон", 25, -1],
        ["example.jpg", "мягкий оконный свет, нежные тени", 25, -1]
    ]
)

demo.launch(server_name="0.0.0.0", server_port=7860)
```

## Интеграция с ComfyUI

IC-Light доступен как узлы ComfyUI:

```bash
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-IC-Light.git
```

### Рабочий процесс ComfyUI

1. Загрузите ваше изображение
2. Добавьте узел IC-Light Loader
3. Подключите к узлу IC-Light Apply
4. Установите запрос по освещению
5. Подключите к KSampler
6. Вывод в Save Image

## С удалением фона

```python
from ic_light import ICLightFBC
from rembg import remove
from PIL import Image

# Сначала удалите фон
original = Image.open("photo.jpg")
foreground = remove(original)

# Загрузите новый фон
background = Image.open("studio_bg.jpg")

# Пересвет для соответствия
model = ICLightFBC.from_pretrained("lllyasviel/IC-Light-FBC")
model.to("cuda")

result = model.relight(
    foreground=foreground,
    background=background,
    prompt="студийное освещение, соответствующее фону",
    num_inference_steps=25
)

result.save("composited.jpg")
```

## Производительность

| Режим              | Разрешение | GPU      | Скорость |
| ------------------ | ---------- | -------- | -------- |
| FC (передний план) | 512x512    | RTX 3090 | 3 с      |
| FC (передний план) | 512x512    | RTX 4090 | 2 с      |
| FBC (композит)     | 512x512    | RTX 4090 | 3 с      |
| FC (передний план) | 1024x1024  | A100     | 4 с      |

## Варианты моделей

| Модель       | Описание                                  | Случай использования            |
| ------------ | ----------------------------------------- | ------------------------------- |
| IC-Light-FC  | Согласованность переднего плана           | Пересвет одиночного изображения |
| IC-Light-FBC | Согласованность переднего и заднего плана | Композиция с фонами             |

## Распространённые проблемы и решения

### Освещение не меняется

**Проблема:** Выход похож на вход

**Решения:**

* Используйте более описательные запросы по освещению
* Увеличьте число шагов вывода до 30-40
* Попробуйте разные значения seed
* Используйте более сильный контраст в запросе (например, "драматичное" вместо "мягкое")

```python

# Более описательный запрос
result = model.relight(
    image=image,
    prompt="чрезвычайно яркий драматический прожектор сверху слева, тёмные тени справа",
    num_inference_steps=35
)
```

### Артефакты на лице/деталях

**Проблема:** Лицо или детали выглядят искажёнными

**Решения:**

* Понизьте силу/масштаб управления
* Используйте больше шагов вывода
* Держите изменения освещения сдержанными
* Постобработка с восстановлением лица

### Проблемы со сдвигом цвета

**Проблема:** Нежелательные изменения цвета

**Решения:**

* Будьте конкретны в описании цвета в запросе
* Добавьте «сохранить оригинальные цвета» в запрос
* Используйте нейтральные по цвету описания освещения
* Постобработка цветокоррекцией

### Изменения фона

**Проблема:** Фон меняется, когда должен меняться только передний план

**Решения:**

* Используйте режим FC (согласованность переднего плана)
* Предварительная обработка с удалением фона
* Используйте маску для изоляции объекта

### Несогласованные результаты

**Проблема:** Одинаковый запрос даёт очень разные результаты

**Решения:**

* Установите фиксированный seed для воспроизводимости
* Увеличьте число шагов вывода для стабильности
* Используйте более простые, прямые запросы

```python

# Согласованные результаты с фиксированным seed
result = model.relight(
    image=image,
    prompt=prompt,
    num_inference_steps=30,
    generator=torch.Generator("cuda").manual_seed(42)
)
```

## Устранение неполадок

### Пересвет выглядит неестественно

* Согласуйте направление освещения с сценой
* Используйте подходящую интенсивность света
* Учитывайте тени на оригинальном изображении

### Фон затронут

* Правильно используйте маску переднего плана
* Сначала сегментируйте объект от фона
* Настройте параметры затухания света

### Выход слишком тёмный/яркий

* Отрегулируйте значения интенсивности света
* Используйте HDR-вывод, если доступно
* Постобработка с помощью кривых

### Модель не загружается

* Загрузите все необходимые контрольные точки
* Проверьте целостность файлов
* Проверьте совместимость с CUDA

## Оценка стоимости

Типичные ставки на маркетплейсе CLORE.AI (по состоянию на 2024):

| GPU       | Почасовая ставка | Дневная ставка | Сессия 4 часа |
| --------- | ---------------- | -------------- | ------------- |
| RTX 3060  | \~$0.03          | \~$0.70        | \~$0.12       |
| RTX 3090  | \~$0.06          | \~$1.50        | \~$0.25       |
| RTX 4090  | \~$0.10          | \~$2.30        | \~$0.40       |
| A100 40GB | \~$0.17          | \~$4.00        | \~$0.70       |
| A100 80GB | \~$0.25          | \~$6.00        | \~$1.00       |

*Цены варьируются в зависимости от провайдера и спроса. Проверьте* [*CLORE.AI Маркетплейс*](https://clore.ai/marketplace) *для текущих тарифов.*

**Экономьте деньги:**

* Используйте **Спот** market для гибких нагрузок (часто на 30–50% дешевле)
* Платите с помощью **CLORE** токенов
* Сравнивайте цены у разных провайдеров

## Следующие шаги

* [TripoSR](https://docs.clore.ai/guides/guides_v2-ru/3d-generaciya/triposr) - Преобразование пересвеченных изображений в 3D
* Stable Diffusion - Генерация изображений для пересвета
* ComfyUI - Расширенная интеграция рабочих процессов
* [Fooocus](https://docs.clore.ai/guides/guides_v2-ru/generaciya-izobrazhenii/fooocus-simple-sd) - Простая генерация изображений
