Эксперимент с Deforum и Stable Diffusion WebUI
Пошаговый отчёт об установке и экспериментах с 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 по умолчанию интерполирует изображения, что даёт “живую мутацию”. Для реалистичного, последовательного движения персонажей рекомендую:
- Pose-guided approach (ControlNet + OpenPose):
- Сгенерировать серию поз (openpose) для ключевых кадров.
- Подключить ControlNet (pose) и дать набор pose-изображений/расписаний.
- Это даёт модели жёсткие условия для расположения и суставов персонажа.
- Использовать AnimateDiff или модели, обученные на движении:
- AnimateDiff и аналоги специально обучены на видеоданных и дают более связные движения.
- Комбинировать с пост-интерполяцией (RIFE/DAIN):
- Сначала сгенерировать кадры в более низком fps, затем интерполировать до 60 fps нейросетевым видеомежкадровым решением для плавности.
- Фиксация элементов через masks / inpainting:
- Для важных объектов использовать маски (SAM + ControlNet) и inpainting, чтобы не допустить «размывания» ключевых объектов.
- Повторяемость:
- Использовать фиксированный 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.
- Ошибки, встречающиеся в процессе, оказались решаемыми (правки конфигов, установка недостающих пакетов).
Следующие шаги (план):
- Подключить ControlNet (pose) + набор поз для ключевых кадров.
- Попробовать AnimateDiff (или Stable Video Diffusion) на тех же промптах и сравнить результаты.
- Прогнать RIFE-интерполяцию и сравнить плавность.
- При положительном результате — автоматизировать процесс рендера в пайплайн (конфиг → WebUI → сборка видео → интерполяция) и выложить demo.
💬 Обсуждение эксперимента