# OpenSora

{% hint style="info" %}
**Доступны более новые альтернативы!** [**FramePack**](https://docs.clore.ai/guides/guides_v2-ru/generaciya-video/framepack) генерирует видео всего с 6 ГБ VRAM, [**Wan2.1**](https://docs.clore.ai/guides/guides_v2-ru/generaciya-video/wan-video) предлагает превосходное качество, и [**LTX-2**](https://docs.clore.ai/guides/guides_v2-ru/generaciya-video/ltx-video-2) добавляет встроенную генерацию аудио.
{% endhint %}

Генерируйте видео с OpenSora, открытой альтернативой Sora, на GPU CLORE.AI.

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

## Почему OpenSora?

* **Открытый исходный код** - Полная лицензия Apache 2.0
* **Вдохновлено Sora** - Архитектура DiT, как у Sora от OpenAI
* **Масштабируемость** - Несколько размеров моделей и разрешений
* **Длинные видео** - Генерация до 16 секунд
* **Активная разработка** - Регулярные обновления и улучшения

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

| Модель         | Разрешение | Длительность | VRAM  | Качество |
| -------------- | ---------- | ------------ | ----- | -------- |
| OpenSora 1.2   | 720p       | 16с          | 24 ГБ | Отлично  |
| OpenSora 1.1   | 480p       | 8с           | 16GB  | Хорошо   |
| OpenSora 1.0   | 256p       | 4с           | 8GB   | Базовый  |
| Open-Sora-Plan | 512p       | 10с          | 20GB  | Отлично  |

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

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

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

**Порты:**

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

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

```bash
git clone https://github.com/hpcaitech/Open-Sora && \
cd Open-Sora && \
pip install -e . && \
pip install gradio && \
python scripts/inference.py \
    --prompt "Кот играет с клубком" \
    --num-frames 51 \
    --resolution 480p \
    --save-dir ./outputs
```

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

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

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

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

## Требования к аппаратному обеспечению

| Версия модели | Минимальная GPU | Рекомендуется | Оптимально |
| ------------- | --------------- | ------------- | ---------- |
| OpenSora 1.0  | RTX 3070 8GB    | RTX 3090 24GB | RTX 4090   |
| OpenSora 1.1  | RTX 3090 16GB   | RTX 4090 24GB | A100 40GB  |
| OpenSora 1.2  | RTX 4090 24GB   | A100 40GB     | A100 80GB  |

## Установка

### Из исходников

```bash
git clone https://github.com/hpcaitech/Open-Sora
cd Open-Sora

# Установить зависимости
pip install -e .

# Скачать веса модели
python scripts/download_weights.py --version 1.2
```

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

```bash
pip install opensora
```

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

### Командная строка

```bash
# Простая генерация
python scripts/inference.py \
    --prompt "Красивый закат над океаном, кинематографично" \
    --num-frames 51 \
    --resolution 480p \
    --save-dir ./outputs

# Высокое качество
python scripts/inference.py \
    --prompt "Величественный орёл, парящий в облаках" \
    --num-frames 102 \
    --resolution 720p \
    --num-sampling-steps 100 \
    --save-dir ./outputs
```

### Python API

```python
import torch
from opensora.models import OpenSoraModel
from opensora.utils import export_to_video

# Загрузить модель
model = OpenSoraModel.from_pretrained("hpcaitech/OpenSora-v1.2")
model.to("cuda")

# Сгенерировать видео
prompt = "Ракета, взлетающая в космос, драматическое освещение, кинематографично"

video = model.generate(
    prompt=prompt,
    num_frames=51,
    height=480,
    width=854,
    num_inference_steps=50,
    guidance_scale=7.0
)

# Сохранить
export_to_video(video, "rocket.mp4", fps=24)
```

## Расширенная генерация

### С отрицательными подсказками

```python
video = model.generate(
    prompt="Профессиональная фотография тигра в дикой природе",
    negative_prompt="размыто, низкое качество, искажено, артефакты",
    num_frames=51,
    num_inference_steps=75,
    guidance_scale=7.5
)
```

### Длинные видео

```python
# Сгенерировать 16 секунд при 24fps
video = model.generate(
    prompt="Таймлапс цветения цветов в саду",
    num_frames=384,  # 16 секунд при 24fps
    height=480,
    width=854,
    num_inference_steps=100
)

export_to_video(video, "timelapse.mp4", fps=24)
```

### Высокое разрешение

```python
# Генерация 720p (требуется больше VRAM)
video = model.generate(
    prompt="Вид с воздуха на город ночью с огнями",
    num_frames=51,
    height=720,
    width=1280,
    num_inference_steps=75
)
```

## Примеры промптов

### Кинематографично

```python
prompts = [
    "Кинематографический кадр самурая, вынимающего меч, драматическое освещение, 4K",
    "Эпический широкий план замка на утёсе во время шторма",
    "Замедленное движение капель воды, падающих в спокойный пруд",
    "Следящий кадр по неоновому киберпанк-аллее ночью"
]
```

### Природа

```python
prompts = [
    "Северное сияние над заснеженными горами, таймлапс",
    "Макросъёмка бабочки, вылезающей из куколки",
    "Океанские волны, разбивающиеся о вулканические скалы на закате",
    "Туман, стелющийся по древнему лесу на рассвете"
]
```

### Абстракция

```python
prompts = [
    "Красочные капли краски, падающие в воду, замедленное движение",
    "Фракталы, эволюционирующие и трансформирующиеся, психоделические цвета",
    "Жидкий металл, превращающийся в разные формы"
]
```

## Параметры конфигурации

### Предустановки разрешения

```python
resolutions = {
    "256p": (256, 455),
    "360p": (360, 640),
    "480p": (480, 854),
    "720p": (720, 1280),
    "1080p": (1080, 1920)  # Требуется большой объём VRAM
}
```

### Настройки качества

```python
# Быстрый предпросмотр
config_fast = {
    "num_frames": 25,
    "num_inference_steps": 25,
    "guidance_scale": 5.0
}

# Сбалансировано
config_balanced = {
    "num_frames": 51,
    "num_inference_steps": 50,
    "guidance_scale": 7.0
}

# Максимальное качество
config_quality = {
    "num_frames": 102,
    "num_inference_steps": 100,
    "guidance_scale": 7.5
}
```

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

```python
import gradio as gr
import torch
from opensora.models import OpenSoraModel
from opensora.utils import export_to_video
import tempfile

model = OpenSoraModel.from_pretrained("hpcaitech/OpenSora-v1.2")
model.to("cuda")

def generate_video(prompt, negative_prompt, frames, steps, guidance, resolution, seed):
    res_map = {"480p": (480, 854), "720p": (720, 1280)}
    height, width = res_map.get(resolution, (480, 854))

    generator = torch.Generator("cuda").manual_seed(seed) if seed > 0 else None

    video = model.generate(
        prompt=prompt,
        negative_prompt=negative_prompt,
        num_frames=frames,
        height=height,
        width=width,
        num_inference_steps=steps,
        guidance_scale=guidance,
        generator=generator
    )

    with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as f:
        export_to_video(video, f.name, fps=24)
        return f.name

demo = gr.Interface(
    fn=generate_video,
    inputs=[
        gr.Textbox(label="Prompt", lines=2),
        gr.Textbox(label="Negative Prompt", value="размыто, низкое качество"),
        gr.Slider(25, 200, value=51, step=1, label="Кадры"),
        gr.Slider(20, 150, value=50, step=5, label="Шаги"),
        gr.Slider(3, 15, value=7, step=0.5, label="Guidance"),
        gr.Dropdown(["480p", "720p"], value="480p", label="Разрешение"),
        gr.Number(value=-1, label="Seed")
    ],
    outputs=gr.Video(label="Сгенерированное видео"),
    title="OpenSora - Текст в видео",
    description="Генерируйте видео с помощью OpenSora. Запуск на CLORE.AI."
)

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

## Оптимизация памяти

```python
# Включить оптимизации памяти
model.enable_model_cpu_offload()
model.enable_vae_tiling()

# Для очень низкой видеопамяти
model.enable_sequential_cpu_offload()

# Использовать пониженную точность
model = OpenSoraModel.from_pretrained(
    "hpcaitech/OpenSora-v1.2",
    torch_dtype=torch.float16
)
```

## Пакетная генерация

```python
import os

prompts = [
    "Феникс, восстающий из пламени",
    "Дождь, падающий на городские улицы ночью",
    "Таймлапс цветения цветов",
    "Северное сияние над горами"
]

output_dir = "./videos"
os.makedirs(output_dir, exist_ok=True)

for i, prompt in enumerate(prompts):
    print(f"Генерируется {i+1}/{len(prompts)}: {prompt[:40]}...")

    video = model.generate(
        prompt=prompt,
        num_frames=51,
        num_inference_steps=50
    )

    export_to_video(video, f"{output_dir}/video_{i:03d}.mp4", fps=24)

    # Очистить память между генерациями
    torch.cuda.empty_cache()
```

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

| Разрешение | Кадры | Шаги | GPU       | Время    |
| ---------- | ----- | ---- | --------- | -------- |
| 480p       | 51    | 50   | RTX 4090  | \~3 мин  |
| 480p       | 51    | 50   | A100 40GB | \~2 мин  |
| 720p       | 51    | 50   | A100 40GB | \~5 мин  |
| 720p       | 102   | 100  | A100 80GB | \~15 мин |

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

Типичные расценки на маркетплейсе CLORE.AI:

| GPU           | Почасовая ставка | \~51 видео по 480p в час |
| ------------- | ---------------- | ------------------------ |
| RTX 4090 24GB | \~$0.10          | \~15-20                  |
| A100 40GB     | \~$0.17          | \~25-30                  |
| A100 80GB     | \~$0.25          | \~35 (может делать 720p) |

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

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

### Недостаточно памяти

```bash
# Использовать меньшее разрешение
python scripts/inference.py --resolution 360p --num-frames 25

# Включить выгрузку на CPU
python scripts/inference.py --cpu-offload

# Уменьшить размер батча
python scripts/inference.py --batch-size 1
```

### Медленная генерация

* Уменьшите `num_inference_steps` (30-50 часто достаточно)
* Используйте более низкое разрешение для предварительного просмотра
* Убедитесь, что GPU используется (проверьте `nvidia-smi`)

### Плохое качество

* Увеличьте количество шагов до 75-100
* Используйте более описательные подсказки
* Добавьте отрицательные подсказки для артефактов
* Попробуйте разные значения guidance (5-10)

### Артефакты видео

* Понизьте guidance scale
* Увеличьте количество шагов инференса
* Используйте временное сглаживание
* Постобработка стабилизацией видео

## OpenSora vs Другие

| Функция                 | OpenSora 1.2 | Hunyuan  | Wan2.1     | SVD      |
| ----------------------- | ------------ | -------- | ---------- | -------- |
| Архитектура             | DiT          | DiT      | DiT        | U-Net    |
| Макс. длительность      | 16с          | 5с       | 5с         | 4с       |
| Максимальное разрешение | 720p         | 720p     | 720p       | 576p     |
| Качество                | Отлично      | Отлично  | Отлично    | Хорошо   |
| Скорость                | Средне       | Медленно | Быстро     | Быстро   |
| Лицензия                | Apache 2.0   | Откройте | Apache 2.0 | Откройте |

**Используйте OpenSora когда:**

* Нужна генерация более длинного видео
* Хотите полную лицензию Apache 2.0
* Заинтересованы в архитектуре, похожей на Sora
* Нужна активная поддержка сообщества

## Альтернатива Open-Sora-Plan

Ещё один опенсорсный вариант:

```bash
git clone https://github.com/PKU-YuanGroup/Open-Sora-Plan
cd Open-Sora-Plan
pip install -e .

python scripts/inference.py \
    --prompt "Ваша подсказка здесь" \
    --output video.mp4
```

## Дальнейшие шаги

* [Hunyuan Video](https://docs.clore.ai/guides/guides_v2-ru/generaciya-video/hunyuan-video) - Высококачественный T2V
* [Wan2.1 Video](https://docs.clore.ai/guides/guides_v2-ru/generaciya-video/wan-video) - Быстрая генерация
* [Stable Video Diffusion](https://docs.clore.ai/guides/guides_v2-ru/generaciya-video/stable-video-diffusion) - Анимация изображений
* [Интерполяция RIFE](https://docs.clore.ai/guides/guides_v2-ru/obrabotka-video/rife-interpolation) - Вставка кадров
