Эксперимент с Deforum и Stable Diffusion WebUI

📅 19.10.2025
🎯 completed
≈55 секунд на кадр (512x512), итоговое видео ≈12 секунд
🖥️ NVIDIA P102-100 10GB + Xeon E5-2650v4, Linux Mint 22.2

Пошаговый отчёт об установке и экспериментах с Deforum — плагином для анимации Stable Diffusion, создании видео из текста и решении возникающих ошибок.

🎬 Эксперимент: генерация видео с помощью Deforum

Deforum — это расширение для Stable Diffusion WebUI (AUTOMATIC1111), позволяющее создавать видео из последовательных кадров, плавно изменяющихся по ключевым кадрам (keyframes) и промптам.
Эксперимент проводился с целью получить связанное, осмысленное видео с персонажами и движением, а также измерить производительность видеокарты NVIDIA P102-100 (10 GB VRAM).


🧩 1. Подготовка окружения

Инструкции и команды, выполнявшиеся последовательно:

  • Создание директорий:
    • mkdir -p ~/AI_Video/Deforum
    • cd ~/AI_Video/Deforum
  • Установка системных зависимостей:
    • sudo apt update && sudo apt install git python3.10 python3.10-venv python3.10-dev ffmpeg -y
  • Клонирование WebUI:
    • git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui webui
    • cd webui
  • Создание виртуального окружения:
    • python3.10 -m venv venv
    • source venv/bin/activate
  • Первичный запуск (чтобы веб-UI скачал зависимости и создал базовую структуру):
    • python launch.py –skip-torch-cuda-test –xformers

Примечание: папка models/Stable-diffusion создаётся автоматически при первом запуске или при добавлении модели вручную.


🔌 2. Установка Deforum

Действия:

  • Переход в папку расширений:
    • cd ~/AI_Video/Deforum/webui/extensions
  • Клонирование Deforum:
    • git clone https://github.com/deforum-art/deforum-for-automatic1111-webui.git
  • Перезапуск WebUI:
    • cd ~/AI_Video/Deforum/webui
    • source venv/bin/activate
    • python launch.py –skip-torch-cuda-test –xformers

После успешного запуска в интерфейсе WebUI появилась вкладка “Deforum”.


⚙️ 3. Принципы работы и настройки Deforum

Ключевые параметры, которые использовались и настраивались:

  • prompt / text_prompts — основной текстовый запрос, можно задать разные промпты на ключевых кадрах.
  • animation_mode — “2D” или “3D”. 3D даёт эффект движения камеры.
  • max_frames — общее число кадров (fps × duration).
  • fps — кадры в секунду, для P102-100 рекомендуемо 12–15.
  • key_frames — расписание ключевых кадров (камера, zoom, translation, rotation).
  • seed schedule — позволяет фиксировать/изменять seed в ходе анимации.
  • sampler и steps — выбор метода семплинга и числа шагов.
  • output path — куда сохраняются кадры и итоговое видео.

🧠 4. Пример сценария генерации (файлы и конфиги)

Мы использовали подход “генерировать кадр за кадром” и затем собирать видео. Для повторяемости сохранили JSON-конфиг.

Сохранённый пример конфига (outputs/deforum_test/config.json) содержал:

  • animation_mode: “3D”
  • max_frames: 180
  • fps: 12
  • width/height: 512 / 512
  • text_prompts: три состояния (начало, середина, конец), чтобы задать сюжетную линию
  • angle/zoom/translation: простые schedules типа “0:(0)” или “0:(1.02)”
  • seed: 42
  • sampler: “Euler a”
  • steps: 25
  • cfg_scale: 7.5

Порядок действий: 1) Сохранили config.json. 2) Загрузили его в вкладке Deforum → Load Settings. 3) Запустили Generation → Run (в UI) или запускали WebUI с –deforum-run-now (для автономного прогона).


🧩 5. Ошибки, которые возникли, и как их исправляли (в деталях)

1) Ошибка: launch.py: error: argument --deforum-run-now: expected one argument

Симптом: при запуске скрипта мы указывали флаг без аргумента (или давали булево значение некорректно).
Разбор: в текущей версии WebUI/Deforum параметр --deforum-run-now ожидает путь к JSON-конфигу.
Решение: запускать так:

  • python launch.py –deforum-run-now /path/to/deforum_config.json –deforum-terminate-after-run-now

Или убрать эти флаги и запускать вручную через UI.


2) Ошибка: AttributeError: 'NoneType' object has no attribute 'split'

Симптом: трейс появляется в файле animation_key_frames.py при попытке разбить строку ключевых кадров.
Причина: одно или несколько полей, ожидающих строку (например, key_frames, camera, zoom), были равны null/None.
Устранение:

  • В deforum_config.json явно задали пустые строки, а не null:
    • “key_frames”: “”
    • “camera”: “”
    • “zoom”: “”
  • После этого парсер безопасно обрабатывает отсутствие расписаний.

3) Ошибка: ModuleNotFoundError: No module named 'ldm' и похожие

Симптом: при импорте доп. скриптов (AnimateDiff/motion module) Python не находил модуль ldm или другие зависимости.
Разбор: некоторые расширения ожидают структуру/модули из старых репозиториев (latent-diffusion) или дополнительные пакеты.
Решение:

  • Либо удалить/отключить тот скрипт/расширение, либо установить недостающие репозитории локально и добавить их в PYTHONPATH, либо адаптировать импорт под WebUI (иногда проще поставить официальные зависимости через pip).

4) Ошибка установки некоторых пакетов (сборка wheel)

Пример: при установке требований появлялась ошибка сборки pycairo/pycairo meson, или tokenizers (rust/cargo) падал.

Решение:

  • Для pycairo: установить системные библиотеки (на Debian/Ubuntu):
    • sudo apt install libcairo2-dev pkg-config python3-dev build-essential -y
  • Для tokenizers (rust): установить rust toolchain:
    • curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs sh
    • source ~/.cargo/env
  • Повторная установка требуемых пакетов.

5) Предупреждение: no module 'xformers'

Разбор: расширение xformers даёт ускорение внимания, но его установка может быть проблематичной на некоторых системах/версиях CUDA.
Решение: можно работать без xformers, либо ставить prebuilt wheel подходящей версии CUDA/torch, либо использовать опцию –opt-sdp-no-mem-attention для уменьшения памяти.


🔥 6. Производительность и наблюдения

  • Средняя скорость: ≈55 сек./кадр при 512×512 (на P102-100).
  • VRAM: 1.4–1.5 GB из 10 GB.
  • GPU utilization: 95–100% во время генерации.
  • Температура: 50–60°C.
  • Итоговое видео: 12–15 секунд при 12 fps (для 120–180 кадров).

Наблюдение: при интерполяции между ключевыми кадрами часто появлялся эффект «мутирующей фотографии» — объекты меняются формой и деталями между кадрами, т.к. модель домысливает промежуточные состояния вместо чёткого следования физике движения.


🎞️ 7. Результаты (примеры)

  • Полный рендер 180 кадров (12 fps → 15 секунд).

🧩 8. Рекомендации по получению связного движения персонажей

Deforum по умолчанию интерполирует изображения, что даёт “живую мутацию”. Для реалистичного, последовательного движения персонажей рекомендую:

  1. Pose-guided approach (ControlNet + OpenPose):
    • Сгенерировать серию поз (openpose) для ключевых кадров.
    • Подключить ControlNet (pose) и дать набор pose-изображений/расписаний.
    • Это даёт модели жёсткие условия для расположения и суставов персонажа.
  2. Использовать AnimateDiff или модели, обученные на движении:
    • AnimateDiff и аналоги специально обучены на видеоданных и дают более связные движения.
  3. Комбинировать с пост-интерполяцией (RIFE/DAIN):
    • Сначала сгенерировать кадры в более низком fps, затем интерполировать до 60 fps нейросетевым видеомежкадровым решением для плавности.
  4. Фиксация элементов через masks / inpainting:
    • Для важных объектов использовать маски (SAM + ControlNet) и inpainting, чтобы не допустить «размывания» ключевых объектов.
  5. Повторяемость:
    • Использовать фиксированный seed + шаги в ключевых кадрах, чтобы не было неожиданной смены формы.

🔧 9. Команды и утилиты для мониторинга

  • Компактный вывод температуры и загрузки GPU:
    • watch -n 1 –no-title nvidia-smi –query-gpu=temperature.gpu,utilization.gpu,memory.used –format=csv,noheader,nounits
  • Просмотр свободной/занятой памяти:
    • nvidia-smi
  • Логирование процесса генерации: смотреть stdout WebUI и файлы в outputs/deforum/ для прогресса и ошибок.

🧠 10. Заключение и следующий шаг

Выводы:

  • Deforum — рабочее и удобное средство для быстрого прототипирования анимаций, но для осмысленных движений персонажей требуется контроль (pose, controlnet) или специализированные модели.
  • Аппарат P102-100 (10GB) справляется с задачей 512×512 кадров при разумных шагах и настройках, но ресурс ограничен: крупные сцены/высокое разрешение потребуют либо батч-рендеринга блоками, либо более ёмкий GPU.
  • Ошибки, встречающиеся в процессе, оказались решаемыми (правки конфигов, установка недостающих пакетов).

Следующие шаги (план):

  1. Подключить ControlNet (pose) + набор поз для ключевых кадров.
  2. Попробовать AnimateDiff (или Stable Video Diffusion) на тех же промптах и сравнить результаты.
  3. Прогнать RIFE-интерполяцию и сравнить плавность.
  4. При положительном результате — автоматизировать процесс рендера в пайплайн (конфиг → WebUI → сборка видео → интерполяция) и выложить demo.

💬 Обсуждение эксперимента