Как это устроено и почему здесь промт критически важен (в отличие от LLM)
Недавно я анонсировал работу над OSS проектом OpenEffect (Репозиторий пока не опубликован)
Вкратце OpenEffect - это opensource продукт который призван облегчить генерацию видео из фото по заранее заготовленным промтам.
Бета на временном домене чтобы посмотреть примеры и потыкать UI, пока только для своих подписчиков: OpenEffect
Работая над нашим совместным проектом OpenEffect я столкнулся с неочевидной болью. Промтинг для моделей генерации видео не простая задача как кажется. И иногда модель делает не то, что ты представляешь у себя в голове.
Мы привыкли что LLM (типа ChatGPT) умеют понимать нас буквально с полуслова и нужен небольшой неструктурированный промт, чтобы нейронка предложила решение проблемы, да еще и дала рекомендации на смежные темы.
Почему с видео-моделями все не так однозначно?
Ключевое отличие: LLM vs Video Models
LLM (текстовые модели)
- работают с дискретными токенами
- обучены на структурированном языке
- хорошо понимают: контекст, намерение, смысл даже при неточностях
Например вы просите модель: напиши короткий пост про ML
В результате вы практически всегда получите удовлетворяющий ответ, даже при коротких и неточных формулировках.
Видео-модели (Kling, Wan)
- работают с визуальными паттернами
- обучены на сырых изображениях и видео
- не понимают смысл, а сопоставляют: слова в визуальные ассоциации
На самом деле модель не понимает, что вы хотите, она угадывает как это выглядит.
В LLM промте можно написать: “напиши красивый код ml пайплайна”
и модель справится.
При генерации видео промт: “add dramatic flashes” может дать разный результат: фейрверки, засветы, странные световые артефакты
Пример: применяем видео эффект для фото paparazzi-flash
Если коротко то суть эффекта: сделать короткие вспышки от камер, как будто человека фотографируют папараци
input — фото девушки в красном платье
1.
Наивный промт:
Bright dramatic flash bursts around the subject
Результат: искры, взрывы света, странные источники света в кадре
Потому что модель интерпретирует bright, bursts как любой сильный световой эффект, а не фото-вспышку.
2.
Проводим тесты, делаем умнее:
clean bright white flashes
Результат: кадр просто обесцвечивается, иногда пропадает цвет одежды и кожи
Потому что на “white flash” модель делает полный пересвет, а не локальную вспышку.
3–4–5–10
Много много мучаемся и получаем вполне сносный результат.
Результирующий промт
Medium close-up or medium shot of the same subject from the input image.
Brief paparazzi camera flashes pop from off-camera in one continuous shot,
producing short clean photographic light hits across the face, outfit, and background.
No visible fireworks, no sparks, no pyrotechnic light effects.
The same subject remains planted and recognizable throughout.
Only subtle blink, breathing, or slight hair movement is allowed.
Stylish celebrity photo-call energy, clean continuity, no cut, no scene replacement.
В результате: короткие вспышки, без “взрывов” и мусора, лицо остаётся стабильным
Почему так произошло
-
Я зафиксировал тип сцены: “Medium close-up or medium shot”
-
Я задал физику эффекта, а не просто идею: “Brief paparazzi camera flashes pop from off-camera”
-
Я задал форму проявления света: “short clean photographic light hits”
-
Я убрал неправильные интерпретации: “No visible fireworks, no sparks, no pyrotechnic light effects”
и т.д.
Поэтому промт работает не потому что он красиво написан, а потому что он задает все основные настройки для генерации видео.
Модель просто выбирает наиболее вероятный визуальный паттерн.
Если вы пишете: “fire”
даже в контексте остального описания, модель это может интерпретировать как: взрыв, огонь, горение чего-то
Поэтому ей важно ограничить пространство вариантов.
Пример структуры промта:
-
Базовое действие “camera flashes appear”
-
Как именно оно происходит “short, clean, photographic”
-
Какие ограничения у модели “no sparks, no explosions, no full-frame white wash”