Делаю сборку FramePack Neuro для генерации видео из изображений с помощью нейронных сетей
Однажды с помощью нейронных сетей люди научились генерировать обычные картинки. Сначала в маленьком размере, а после нейронные сети начали справляться с большими изображениями в разрешении HD и FullHD.

реклама
Уже давно существуют автономные сборки «Stable Diffusion Web UI Neuro», позволяющие генерировать изображения на компьютерах без доступа к интернету.

И если честно, я уже давно не обновлял сборки Neuro. И они до сих пор прекрасно работают. В этом и отличие нормального софта от «современного», погрязшего в так называемом «болоте зависимостей».
реклама
Однако с недавнего времени нейронные сети научились генерировать видео. Хотя первые версии работали довольно забавно, но со временем нейронные сети генерируют всё лучше и лучше.
https://www.youtube.com/watch?v=jplR8-e1CfI
![]() |
![]() |
И тут мне на глаза попался проект FramePack. Важно заметить, у данного проекта я знаю только один основной адрес на GitHub. Прочие веб сайты, выдающие себя за официальную страницу проекта, вероятно, созданы злоумышленниками.
FramePack позволяет генерировать видео длительностью до двух минут. При этом, по заявлениям, работает на видеокартах с объёмом памяти всего 6 ГБ. Разумеется, никакой поддержки видеокарт AMD.
реклама
Есть инструкции по установке в среде Windows. Даже есть архив с программой. Не знаю, действительно ли он автономный или как всегда. В любом случае придётся отдельно докачивать более 30 ГБ моделей.
Ну а пользователям Linux придётся потанцевать с бубном для установки программы...
https://github.com/lllyasviel/FramePack
![]() |
![]() |
![]() |
Остальная часть репозитория заполнена примерами генерации видео. Тут больше нечего сказать.
![]() |
![]() |
реклама
Так вот, как вы думаете, достаточно скачать основные файлы из репозитория, прописать пару команд в терминал согласно инструкции, и всё заработает? Конечно, нет! Иначе этой статьи не существовало бы, если бы всё было так просто, как расписывают в инструкциях.
Я уже давно использую Linux вместо операционной системы и даже создал свой дистрибутив Chimbalix, так как прочие оказались непригодными для использования в моём случае. Так же разработал свой способ распространения софта под названием Installer-SH, ибо уже существующие способы в Linux оказались не очень пригодными для использования.
И вот, проведя целый шаманский обряд с бубном, израсходовав более 65 ГБ интернет трафика за пол дня, зачастую отклоняясь от инструкций, я, наконец, смог сгенерировать короткое видео длительностью шесть секунд, используя GeForce RTX 3060 Mobile на 6 GB.
Мне не удалось выставить слишком высокое качество со столь ограниченными ресурсами для получения быстрого результата.
![]() |
![]() |
![]() |
Одни из ранних генераций получались не более одной секунды. Для ясности ситуации: Сразу после установки нейронной сети я даже двух секунд видео не мог сгенерировать, потому что на самом деле имеющихся 6 ГБ памяти было недостаточно. Даже если включить встроенную графику в процессоре, полностью освободив память дискретной видеокарты.
Может быть, в среде Windows и не возникло бы проблем с нехваткой памяти, ибо драйверы для этой операционной системы гораздо функциональнее, так как подсистема драйверов лучше, чем у Linux. Но у меня нет ни желания, ни свободного места для дополнительных экспериментов.
К текущему моменту я могу генерировать видео длительностью более пяти секунд в среде Linux, используя свой же дистрибутив Chimbalix. Но работа ещё не завершена... Есть некоторые нюансы, которые хочу переработать ради удобства использования. Так что начнём сначала.
Установка по официальной инструкции
В инструкции первым делом предупреждают о том, что нужно будет скачать более 30 ГБ моделей. Что же, спасибо за предупреждение. Далеко не все предупреждают о таких якобы мелочах.
Потом идёт рекомендация использовать Python 3.10. Но тут возникает проблема, ибо что к «дряхлому пингвину» из коробки прибьют гвоздями, с тем и придётся иметь дело. Это вам не Windows.

Далее нужно ввести пару команд в терминале и запустить GUI. Звучит легко и просто. Но сразу возникает масса вопросов: Где вводить команды? Нужно что-то сделать заранее? Или так сойдёт?
Допустим, я не совсем тупой пользователь ПК и кое-что умею. Не зря ведь установлен Linux вместо операционной системы. Но и не чудотворец с третьим глазом в пятой точке и телепатическими способностями из астрала в соседней вселенной. Потому скачиваю файлы из репозитория и распаковываю в отдельную папку.

По инструкции ввожу первую команду. Но она выплюнула ошибку. Всё. На этом официальная инструкция полностью проявила свою несостоятельность.

Подавляющее большинство нормальных людей уже на этом этапе бросят всё это линуксоидное мракобесие. И просто вернутся к Windows. К сожалению, куда не плюнь в Linux везде что-то подобное происходит.
Реальная установка...
Первым делом колдуем виртуальное окружение Python. В идеале нужно запихнуть сам Python в отдельную папку. Но мы сейчас в Linux вместо нормальной ОС, а значит, можем огрести массу проблем с зависимостями. Так что будет пользоваться тем, что уже прибито гвоздями к «дряхлому пингвину». Всё равно не собираюсь поддерживать все дистрибутивы Линукса. Ибо это будет сущий ад.

После нужно активировать виртуальное окружение. И, наконец, можно ввести команду из инструкций. Так как я это всё мракобесие уже проходил, в кэше на системном диске уже валяется несколько гигабайт повторно использованных пакетов. Целых 13 с половиной гигабайт, если быть точным.

Но это всё неважно. Всё равно инструкции оказались нерабочими, ибо завершилось дело ошибками зависимостей. Типичные репозитории в линуксоидном стиле.
![]() |
![]() |
Даже если выбрать конкретную версию Torch, в результате всё равно будет ошибка зависимостей. И я не просто так выбрал Torch версии 2.7.1. Модуль Xformers из всё тех же, мягко говоря, нелюбимых мной репозиториев не работает с другими версиями Torch.

Что же делать. На самом деле в первый раз я брал Torch из Cu128 Nightly репозитория. Но если снова так поступлю, то, вероятно, намусорю лишними зависимостями. Потому просто перенесу нужный модуль из уже готового виртуального окружения.

Ну вот, пакетный менеджер, наконец, угомонился со своими поломанными зависимостями. Осталось выкачать ещё пару гигабайт из интернета. Виртуальное окружение установлено.
![]() |
![]() |
Причём важно заметить: Версию Torch крайне желательно указать руками. Иначе Питухонский пакетный менеджер натащит всякого конфликтующего между собой мусора.
А ведь по инструкции всё было так легко и просто...
Можно, наконец, ввести вторую команду по инструкции. Как можно заметить, Python уже вляпался в конфликты, потому пришлось удалять несколько конфликтующих пакетов. А теперь представьте, если бы это приходилось делать прямо в операционной системе, а не виртуальном окружении. Особенно когда половина Линуксов зависима от Python по самое не хочу.
![]() |
![]() |
Кстати, папка уже весит целых 6 ГБ. На всякий случай архивирую. Если что-то вдруг пойдёт не так, мне будет достаточно просто распаковать архив без лишнего пердолинга в терминале. Заодно проверяю, насколько хорошо сжимаются файлы.

Дальше по инструкции. Говорят, что можно установить оптимизаторы Xformers, потом Flash Attention и Sage Attention. Но от первого я не заметил никакой пользы, только тонна лишних зависимостей потребуется. Второй вообще не устанавливался. А третий приводил к ошибкам при запуске.

Я, конечно, могу установить Xformers, чтобы было, но это сомнительно. Хотя ладно. Для меня это сейчас одна команда в терминале, а для кого-то это может превратиться в целое приключение. Так что установлю модуль.

Но файлы перенесу в отдельный каталог, чтобы не использовались. Кому надо — перенесут сами.
![]() |
![]() |
С установкой покончили.
Первый запуск
Наконец всё можно запустить? Нельзя! Модуль потерялся! Его за ногу! А ведь точно, я забыл скопировать один важный файл в корне каталога с модулями...

Вторая попытка! Аллилуйя! Оно запустилось и начало качать модели! Я не боюсь того, что вдруг место закончится на диске, ибо использую BTRFS файловую систему, а она исключает дублирование одинаковых файлов. Но всё равно имею лишние тридцать гигабайтов свободных, ибо во время скачивания файлы не являются идентичными, а значит, не сокращаются файловой системой.

Лишь бы хватило места, что-то я уже начинаю беспокоиться...

На всякий случай. Модели весом больше 45 ГБ были удалены из первой эксперментальной сборки.

Проблемы с нехваткой места удалось избежать. Но есть и ошибки передачи данных через интернет. Коротко, почему я не уважаю разработчиков, создающих сильно зависимый от интернета софт, когда можно сделать без зависимости от сети.

Хотя в текущем случае зависимость оправдана большим объёмом данных. Но в ряде прочих случаев разработчики ведут себя отвратительно, завязывая на сеть «вещи», которые можно было не завязывать.
Ладно. Там уже скачались модели, и нейронная сеть запустилась!

Извините, но 49 ГБ моделей я точно не стану включать в сборку. Придётся разработать предупреждение для пользователя, которое предупредит перед запуском о таком жёстком количестве скачиваемых моделей, необходимых для работы.

Запускать браузер и вводить адрес нужно вручную.
![]() |
![]() |
Теперь забросим изображение в качестве исходного материала и сгенерируем видео, используя стандартные параметры!
Для начала нужно объяснить, что тут происходит. Видео генерируется с конца в начало примерно по 32 кадра за один раз. Это позволяет достаточно быстро оценить результат генерации по концовке. Хотя может показаться, что генерация идёт и всё нормально. Но на самом деле нет. При генерации следующей секунды видео процесс прерывается нехваткой памяти. Упс.
Танцевать с параметрами генерации смысла нет. Проблема всплывает при любых доступных в GUI параметрах.
![]() |
![]() |
![]() |
![]() |
Решаем проблему нехватки памяти...
Ну что, давайте создадим скрипт и наколдуем четыре строки кода. Первая просто указывает на текущий каталог скрипта. Вторая активирует виртуальное окружение, иначе программа будет пытаться использовать системные библиотеки Python, а это очень плохо. Только путь подправить нужно... Третья строка решает проблему нехватки памяти. Ну и в конце происходит запуск нейронной сети.

Собственно, всё. Для экономии времени при тестировании снижаю длительность видео до трёх секунд, а качество — до пяти итераций.

Пять итераций со включенным TeaCache выглядят ужасно. Однако теперь нейронная сеть действительно работает.
![]() |
![]() |
![]() |
Думаете, на этом можно закончить сборку? Пф. Как наивно.
Новые функции...
В графическом интерфейсе, как все уже могли заметить, нет очень важных параметров, отвечающих за размер генерируемого изображения. Потому давайте перепишем исходный код FramePack и добавим эти важные настройки.

Напомню, я не разработчик софта, особенно на языке Python. Мне ближе будет C++ язык. Но тут выбирать не приходится. Нужно работать с тем, что есть.
Отлично! Появилось несколько новых параметров

Разрешение генерации поставил на уровне 64x64.

И оно действительно генерирует в таком разрешении. Моя RTX 3060 Mobile даже оказалась не полностью загружена работой.

Можно ещё попробовать прикрутить настройку fps, но я не знаю, к каким последствиям это может привести... Да кому вообще до этого есть дело! Давайте просто прикрутим!

И оно сработало! Правда, поломались формулы, рассчитывающие длительность сгенерированного видео. Но кому не всё равно? Я ведь предупредил, что эту настройку трогать не рекомендуется.

Пожалуй, нужно отключить функцию TeaCache, а так же установить зерно в случайное значение. Но это уже изменения по части удобства использования.
Меня устраивает доработанное состояние программы. Осталось перенести изменения на версию, использующую F1 модель, и можно продолжать работу над сборкой.

Или кто-то подумал, что на этом всё? Забыли уже? Вместо операционной системы установлен Linux...
Лечим от сетевой зависимости....
Что произойдёт, если отключить интернет и попытаться запустить FramePack? Напомню, разработчик ничего не пишет в системных требованиях про обязательное наличие интернет подключения...

Правильно! Нейросеть закроется ошибкой, ругаясь на недоступность каких-то ресурсов! Это просто 55 гигабайт нерабочего мусора на диске пользователя, если нет доступа к Интернету или репозитории уже умерли!
![]() |
![]() |
У меня вызывают отвращение разработчики, намеренно или нет привязывающие софт к репозиториям, которые в любой момент могут исчезнуть, что приведёт к полной неработоспособности софта в итоге...
Ну что же, будем лечить это наплевательское отношение. Когда работоспособностью софта могут косвенно управлять владельцы сторонних ресурсов в интернете.
Просто отключить Online режим не выйдет, ибо всё равно пытается обращаться к ресурсам в посторонних репозиториях. Проблема в том, что всё максимально разбито, и это усложняет поиск зловредного кода.

К счастью, мне не пришлось самому разбираться в проблеме, ибо нашлись другие люди с такой же проблемой. Так что внедряю исправление в свою сборку, хотя это по-хорошему должен был сделать разработчик оригинального проекта. Тем более ему всё уже давно принесли на блюдечке.

Отлично. Теперь сборка способна работать без интернета.

Всё? Закончили со сборкой? Нет! Как вы могли о таком помыслить!
Лечим Python...
Теперь очередь виртуального рабочего окружения, нагло прибитого гвоздями к конкретному каталогу.
Что произойдёт, если изменить имя папки с нейронной сетью?

Верно. Всё поломается. Рабочее окружение не активируется, а команда для запуска не будет найдена.

Это серьёзная проблема основополагающего софта Python, который создаёт прибитые гвоздями рабочие окружения, непригодные для переноса после создания. И это вина разработчиков. Ведь именно они разработали таким образом, чтобы по умолчанию всё прописывалось абсолютными путями и ломалось при переносе.
Впрочем. Тут помогут старые наработки от других проектов Neuro. Нужно только адаптировать под FramePack и протестировать.

Вот и адаптировали старый код к новому приложению. Теперь можно переносить папку с нейронной сетью.

Создание Installer-SH пакета
Наконец, можно приступить к упаковке файлов в установочный пакет.Installer-SH.

Почему не обычным архивом? Потому что мне так удобнее. Да и при необходимости, можно руками распаковать архив с программой.
Так же сделал предупреждение, если папка с моделями отсутствует, чтобы у меня, пользователя, не было лишних сюрпризов на ровном месте.

Дальше настраиваем установочный пакет. Ничего особо сложного.

Установочный пакет FramePack Neuro в формате Installer-SH готов.

Ярлыки для удобного запуска.

Разумеется, я не буду заново скачивать 73 гигабайта моделей (обычные и F1).

Я сделаю символическую ссылку на папку с моделями.

И просто вставлю в папку с программой. Таким образом, модели не будут занимать место на системном диске и не придётся скачивать заново десятки гигабайт.

Проверяю ещё раз свою сборку FramePack Neuro. Никаких проблем. Разве что пальцы рук в движении не очень качественно генерируются, особенно при пониженном разрешении. Но это не проблема.
![]() |
![]() |
Тесты...
Ну что. Приложение собрано, доработано и работает. Осталось сделать ряд интересных генераций для дополнительной проверки.
В разрешении 1280x720 мне не удалось ничего сгенерировать, однако в разрешении 1024x720 получилось. При этом нейронная сеть начала довольно сильно галлюцинировать. Производительность на итерацию около 66 секунд с мобильной RTX 3060 на 6 GB.
А потом поставил генерировать видео длинной 60 секунд. Чтобы ускорить процесс, снизил разрешение до 512x384. Надеюсь, выйдет не слишком плохо.

Прошло 3 часа 30 минут. И вот результат!

Первые две трети видео ничего кардинального не происходило, но начиная с середины, суша начала превращаться в океан, а кот — в рыбу. Не очень удачно...
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
В целом могло быть и хуже.
Дальше проверим модель F1. На этом моменте было решено распаковать уже собранный установочный пакет и внести несколько правок в исходный код.
Видите ли. При генерации используется исходное цифровое значение «Seed». Оно нужно для формирования шума, из которого нейронная сеть что-то лепит. И проблема в том, что FramePack не отображает «зерно», если оно выставлено случайным образом.

Добавим вывод «зерна» как в имя сгенерированного файла, так и в интерфейс.

Правда, это не сработало, как задумывалось. Ведь число записывается введённым значением. Что-то не подумал об этом.

Так будет правильнее.

Отлично. Одной проблемой меньше.

Хотя трансформация в кота явно выдалась не очень. Видимо, я далеко не лучший писатель Промтов.

И да. При работе с моделью F1 генерация происходит от начала до конца, а не наоборот, как при использовании обычной модели.
Выражение лица в самом конце прямо говорит о том, что генерация пошла не как задумано...
![]() |
![]() |
![]() |
![]() |
Следующие несколько генераций уже объединил в одно видео. Хотя это не совсем очевидно, но «Seed» включён в имя файла. Предпоследнее значение и есть то самое «зерно».

Полагаю, на этом можно завершить тесты.
Заключение
Сборка была загружена в репозиторий Neuro, где, собственно, находятся и прочие сборки нейронных сетей.
https://github.com/Shedou/Neuro/releases/tag/framepack_neuro

Осталось оформить страницу. И на этом закончим.

Нейронная сеть, наконец, стала пригодна для использования. Всего-то пришлось потанцевать с бубном над репозиториями и зависимостями Python. Так же пришлось докинуть отсутствующий в репозиториях модуль. Потом набросали костылей для решения проблемы нехватки памяти на видеокартах с 6 ГБ памяти.
Конечно же, не обошлось и без доработки исходного кода, чтобы добавить ряд очень важных функций, отсутствующих из коробки в оригинальном проекте.
После мы лечили проект от сетевой зависимости, чтобы всё работало даже без интернета. Ну и сам Python пришлось подлечить костылями, ибо разработчики сделали откровенную чушь с абсолютными путями в виртуальных рабочих окружениях.
Пришлось изрядно потанцевать с бубном, чтобы FramePack нормально заработал в среде Linux. И то сборку я делал исключительно для своего дистрибутива Chimbalix. В прочих Линуксах не тестировал, ибо далеко не везде даже Python адекватно установлен, не говоря уже о прочих нюансах.
А потом некоторые искренне не понимают, почему это Linux подавляющему большинству людей и даром не нужен...
Конечно, Windows версия FramePack тоже потребовала бы доработок и танцев с бубном. Но явно гораздо меньше.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.











































Комментарии Правила