Ком­пания Black Forest Labs, осно­ван­ная выход­цами из Stability AI (раз­работ­чик Stable Diffusion), без пред­варитель­ных анон­сов выпус­тила новую модель генера­тив­ного искусс­твен­ного интеллек­та Flux. Релиз взор­вал сооб­щес­тво генера­тив­ного ИИ: все раз­говоры теперь толь­ко о новой модели. И она того сто­ит! Давай раз­берем­ся, как ее исполь­зовать и на что она спо­соб­на.

Что за Flux?

Flux — новей­шая базовая модель (а точ­нее — семей­ство моделей) генера­тив­ного искусс­твен­ного интеллек­та для соз­дания изоб­ражений по тек­сто­вым опи­сани­ям. Flux, соз­данный покинув­шими ком­панию Stability AI раз­работ­чиками, уже пред­лага­ет все то, что дол­жна была обес­печить архи­тек­тура Stable Diffusion 3, которая до сих пор в под­вешен­ном сос­тоянии.

Мо­дель Flux отли­чает­ся новым тек­сто­вым декоде­ром с 12 мил­лиар­дами парамет­ров, что поз­воля­ет ей нам­ного уве­рен­нее рас­позна­вать зап­росы и точ­нее сле­довать им. При обу­чении модели не было той жес­ткой цен­зуры, которая при­вела к прак­тичес­ки пол­ной нерабо­тос­пособ­ности Stable Diffusion 3 Medium; в резуль­тате позы людей у Flux выг­лядят более естес­твен­ными. С количес­твом паль­цев на руках дело ста­ло луч­ше, но проб­лема побеж­дена не до кон­ца; добав­лена работа с тек­стом на изоб­ражени­ях — то, что заяв­лялось как прин­ципи­аль­ное отли­чие Stable Diffusion 3.

Мо­дель сущес­тву­ет в трех вари­антах:

Нас инте­ресу­ют две пос­ледние модели — dev и schnell.

А кто разработчики?

О том, что Black Forest Labs сос­тоит из выход­цев из Stability AI, не написал толь­ко ленивый. Эта коман­да раз­работ­чиков сто­яла у исто­ков тех­нологии латен­тной диф­фузии, впос­ледс­твии покинув Stability AI и осно­вав собс­твен­ную ком­панию. На Reddit есть нем­ного до­пол­нитель­ной информа­ции.

Возможности Flux

Flux — гигант­ская по сов­ремен­ным мер­кам модель, спо­соб­ная вос­при­нимать огромное количес­тво кон­цепций и рисовать в широком диапа­зоне сти­лей. На сло­вах это мало отли­чает­ся от воз­можнос­тей моделей SDXL, осо­бен­но с уче­том мно­гочис­ленных ремик­сов и лор. На деле же резуль­таты работы Flux поража­ют. И ведь это толь­ко пер­вая вер­сия базовой модели на осно­ве новой архи­тек­туры. Улуч­шения навер­няка на оче­реди.

Мо­дель спо­соб­на работать с тек­стом, то есть добав­лять на кар­тинки над­писи в точ­ности, как про­сили. Кста­ти, обра­ти вни­мание на очки — сла­бое мес­то SDXL.

Flux неп­лохо понима­ет необыч­ные кон­цепции.

Спо­соб­на вос­про­изво­дить улич­ные сцен­ки (обра­ти вни­мание на руки; это исходная генера­ция без исполь­зования вос­ста­нав­лива­ющих моделей).

Вы­дает кад­ры из псев­доис­торичес­ких гол­ливуд­ских филь­мов (на руке с пер­вой попыт­ки — пять паль­цев; незамут­ненное счастье).

И даже рису­ет иллюс­тра­ции для дет­ских книг.

Для все­го это­го раз­нооб­разия не пот­ребова­лось ни «бро­сания кос­тей» в виде мно­гочис­ленных попыток генера­ции, ни поис­ка и ска­чива­ния соот­ветс­тву­ющих лор.

Хо­чешь поп­робовать новую модель на сво­ем компь­юте­ре? Ни AUTOMATIC1111, ни WebUI Forge для это­го не подой­дут. На момент написа­ния статьи единс­твен­ный софт, под­держи­вающий Flux, — ComfyUI или он же с обо­лоч­кой SwarmUI.

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

Читай также

Ра­нее мы уже изу­чили базовые воз­можнос­ти Stable Diffusion и ус­танов­ку ней­росети на компь­ютер, рас­смот­рели нес­коль­ко базовых моделей и на­учи­лись работать с лорами, сти­лями и рефай­нерами в при­ложе­нии Fooocus. Это при­ложе­ние прек­расно под­ходит для начала работы, поз­воляя сра­зу же получить кра­сивые изоб­ражения, но доволь­но ско­ро поль­зователь упи­рает­ся в потолок. В Fooocus нет воз­можнос­ти сра­зу генери­ровать кар­тинки в высоком раз­решении или авто­мати­чес­ки исправ­лять проб­лемы с руками и лицами; для это­го сущес­тву­ют более прод­винутые, но и нам­ного более слож­ные в исполь­зовании вари­анты, один из которых мы будем изу­чать. А в прош­лой статье мы разоб­рались еще с одним прод­винутым интерфей­сом — WebUI reForge.

Comfy и SwarmUI

ComfyUI — одновре­мен­но и бэкенд, то есть дви­жок, и фрон­тенд, то есть интерфейс, для генера­ции изоб­ражений по тек­сто­вым опи­сани­ям. Дви­жок Comfy — один из луч­ших, а управле­ние памятью, пожалуй, луч­шее из име­юще­гося на сегод­няшний день. В то же вре­мя интерфейс ComfyUI сво­еоб­разен, сло­жен в осво­ении и нра­вит­ся не всем. Ниже — при­мер прос­тей­шей нас­трой­ки генера­ции в Comfy с исполь­зовани­ем модели SDXL и рефай­нера.

Ус­ложне­ние усло­вий генера­ции усложня­ет и диаг­рамму. Впро­чем, у такого под­хода есть и положи­тель­ные сто­роны: пол­ный дос­туп ко всем внут­реннос­тям движ­ка и воз­можность как сох­ранять, так и ска­чивать готовые диаг­раммы‑ворк­флоу, поз­воля­ющие бук­валь­но в нес­коль­ко кли­ков пов­торить то, на соз­дание чего у авто­ра диаг­раммы ушли мно­гие часы работы.

Ес­ли же тебе хочет­ся чего‑то более при­выч­ного, то на помощь при­дет SwarmUI — обо­лоч­ка для Comfy, интерфейс которой очень похож на A1111. SwarmUI — про­дукт оче­ред­ного выход­ца из Stability AI (инте­рес­но, там вооб­ще кто‑нибудь остался?). Его мес­то сре­ди про­чих интерфей­сов мож­но опи­сать так:

Установка и начало работы

SwarmUI сей­час име­ет ста­тус бета‑вер­сии и активно раз­рабаты­вает­ся. Готово­го фай­ла для ска­чива­ния пока нет; для уста­нов­ки SwarmUI в Windows тебе при­дет­ся самос­тоятель­но уста­новить:

Пос­ле это­го ска­чай .bat-файл уста­нов­щика и запус­ти его. Дис­три­бутив уста­новит­ся в пап­ку SwarmUI. В про­цес­се уста­нов­ки ска­чает­ся и рас­паку­ется архив с пор­татив­ной вер­сией Comfy, который исполь­зует­ся в качес­тве движ­ка.

По­ка не спе­ши ничего запус­кать; для работы с Flux тебе при­дет­ся ска­чать еще нес­коль­ко фай­лов. Про­цесс опи­сан в до­кумен­тации в раз­деле Black Forest Labs’ Flux.1 Models.

Для начала опре­делись, какую вер­сию Flux ты хочешь уста­новить. Дос­тупны сле­дующие вари­анты:

16-бит­ные вер­сии хорошо подой­дут к виде­окар­там с минималь­ным объ­емом виде­опа­мяти 16 Гбайт, при этом пол­ная вер­сия тре­бует двад­цати или более шагов генера­ции, а «тур­бо» — ров­но четыре шага. Эти модели нуж­но сло­жить в пап­ку (Swarm)/Models/unet.

8-бит­ные вер­сии под­ходят для виде­окарт с 12 Гбайт виде­опа­мяти и менее. Качес­тво по срав­нению с 16-бит­ными моделя­ми стра­дает нез­начитель­но. Эти модели нуж­но класть в пап­ку (Swarm)/Models/Stable-Diffusion.

Пос­ле это­го нуж­но ска­чать VAE (файл ae.safetensors) из ре­пози­тория модели и положить его в пап­ку (Swarm)/Models/VAE.

Все, на этом под­готов­ка закон­чена — мож­но запус­кать SwarmUI коман­дой launch-windows.bat. И сно­ва при­дет­ся нем­ного подож­дать, пока скрипт доус­тановит зависи­мос­ти. Ког­да про­цесс завер­шится, откро­ется окно с интерфей­сом (при­дет­ся еще подож­дать окон­чания заг­рузки движ­ка).

Для работы с Flux выбери модель (в пра­вом ниж­нем углу), уста­нови параметр CFG в еди­ницу, а параметр Steps (количес­тво шагов) — 20 для обыч­ных моделей или 4 для вер­сии «тур­бо».

info

Па­раметр CFG (Classifier Free Guidance) исполь­зует­ся для управле­ния балан­сом меж­ду точ­ностью сле­дова­ния тек­сто­вому зап­росу и кре­атив­ностью конеч­ного изоб­ражения. Это дос­тига­ется путем сов­мес­тно­го обу­чения условной (cond) и безус­ловной (uncond) диф­фузи­онных моделей. В свое вре­мя сама воз­можность исполь­зовать негатив­ные клю­чевые сло­ва появи­лась в виде хака — зап­роса uncond. По изна­чаль­ной задум­ке — латен­тный шум или «латен­тное нич­то». Чем выше параметр CFG, тем боль­ше рас­сто­яние меж­ду резуль­татами моделей cond и uncond и тем точ­нее модель сле­дует тек­сто­вому зап­росу. Избы­точ­но высокие зна­чения CFG при­водят к «выгора­нию» кар­тинки из‑за рос­та кон­трас­та и насыщен­ности, а чрез­мерно низ­кие — к ее блек­лости и выц­ветанию. Если CFG равен еди­нице, модель uncond не учас­тву­ет в вычис­лени­ях, что исклю­чает воз­можность исполь­зовать негатив­ные клю­чевые сло­ва, но и вдвое сок­раща­ет вре­мя генера­ции.

Те­перь мож­но вво­дить зап­рос в поле Prompt (поле Negative Prompt оставь пус­тым, модель пока не под­держи­вает негатив­ные клю­чевые сло­ва) и жать боль­шую кноп­ку Generate. Модель Flux — очень тяжелая; для начала генера­ции ее тре­бует­ся заг­рузить в память виде­окар­ты. Это может занять око­ло минуты, одна­ко все пос­леду­ющие генера­ции будут стар­товать момен­таль­но. Собс­твен­но, на этом всё, мож­но нас­лаждать­ся сге­нери­рован­ными изоб­ражени­ями.

Шпаргалка: ограничения модели FLUX.1 (dev)

  • CFG=1;
  • не под­держи­вают­ся негатив­ные клю­чевые сло­ва;
  • не под­держи­вают­ся весовые коэф­фици­енты токенов;
  • по­ка не под­держи­вают­ся лоры, тек­сто­вые инверсии, IP-Adapter, ControlNet;
  • чис­ло шагов боль­ше или рав­но 20 (обыч­ная модель) или рав­но 4 (тур­бо).

Дополнительные настройки

Ког­да тебе надо­ест генери­ровать квад­раты 1024 на 1024, изме­нить соот­ношение сто­рон мож­но в нас­трой­ке Resolution.

Об­рати вни­мание: если для SDXL рекомен­дуют раз­решение в 1 мегапик­сель, то для модели Flux раз­меры кар­тинки могут варь­иро­вать­ся в широких пре­делах от 0,5 до 2 мегапик­селей. Модель прек­расно работа­ет, если ты уста­новишь «широко­фор­матное» раз­решение 1920 ✕ 1080.

А если нуж­но еще боль­ше? Тоже не проб­лема: в SwarmUI есть ана­лог Hires.fix. Он находит­ся в раз­деле Refine/Upscale, где ты можешь выб­рать нас­трой­ки для повыше­ния раз­решения.

Сра­зу отка­жись от исполь­зования встро­енных моделей из спис­ка Refiner Upscale Method. В статье «ReForge. Улуч­шаем кар­тинки, генери­руемые Stable Diffusion» я под­робно опи­сал хорошие модели для повыше­ния раз­решения. В качес­тве уни­вер­саль­ной модели пореко­мен­дую 4xNomos8kDAT; ска­чай ее и положи файл в пап­ку (Swarm)\Models\upscale_models. Переза­пус­кать интерфейс нет необ­ходимос­ти, для появ­ления модели в спис­ке дос­таточ­но клик­нуть на вклад­ке Models в ниж­ней час­ти экра­на и нажать икон­ку «Обно­вить».

Нас­трой­ки Refine/Upscale мож­но исполь­зовать те, что на скрин­шоте выше: 0,2 для Refiner Control Percentage, коэф­фици­ент апскей­ла от 1,4 до 2 (в поле Refiner Upscale). Осталь­ные нас­трой­ки пока не тро­гай. В будущем, если ты решишь поп­робовать исполь­зовать модель SDXL для повыше­ния раз­решения кар­тинок, сге­нери­рован­ных Flux, ты можешь выб­рать дру­гую базовую модель — но не забудь в таком слу­чае вклю­чить Refiner CFG Scale, уста­новив его в зна­чение 7 (стан­дарт для моделей SDXL). Наконец, не забудь вклю­чить основной перек­лючатель спра­ва от над­писи Refine/Upscale.

В итоге должно получиться что-то такое
В ито­ге дол­жно получить­ся что‑то такое

Впро­чем, дос­тоинс­тва SwarmUI не огра­ничи­вают­ся одним лишь повышен­ным раз­решени­ем. В интерфей­се есть поч­ти всё, что нуж­но для пов­седнев­ной работы, в том чис­ле мно­гие вещи, которые в WebUI/Forge реали­зова­ны через рас­ширения. Под­робно об этом мож­но почитать в англо­языч­ной статье на Civitai; мы же рас­смот­рим самое инте­рес­ное.

Рука-лицо

Тра­дици­онная проб­лема генера­тив­ных ней­росетей (и Flux здесь, увы, не исклю­чение) — сла­бая про­рисов­ка мел­ких объ­ектов, таких как кис­ти рук и лица, если они не занима­ют боль­шую часть изоб­ражения. В Fooocus мы уже исправ­ляли лица и руки с помощью инс­тру­мен­та inpaint; в WebUI/Forge этот про­цесс мож­но авто­мати­зиро­вать рас­ширени­ем ADetailer или uddetailer.

В SwarmUI проб­лема реша­ется лег­ко и изящ­но через ме­ханизм сег­мента­ции, исполь­зующий CLIPSeg. Пря­мо в тек­сто­вый зап­рос добав­ляют­ся токены сле­дующе­го вида:

<segment:hand:0.3,0.5> текстовое описание того, как должна выглядеть рука
<segment:face:0.3,0.5> текстовое описание того, как должно выглядеть лицо

Здесь hand и face — объ­екты, которые мы хотим выделить и отри­совать в высоком раз­решении; пер­вый чис­ловой параметр (0.3) — допус­тимая сте­пень мутаций (поп­робуй зна­чения меж­ду 0.2 и 0.6, чем боль­ше — тем силь­нее будут изме­нения; по умол­чанию 0.6, но это мно­гова­то), а пос­ледний (0.5) — сте­пень дос­товер­ности рас­позна­вания объ­екта (задашь 0 — и будет выб­рано все изоб­ражение целиком, 1 — не будет выб­рано ничего; 0.5 — хорошее началь­ное зна­чение).

Ес­ли бы не завышен­ное зна­чение допус­тимых мутаций 0.6, мож­но было бы и вов­се оста­новить­ся на упро­щен­ном зап­росе вида <segment:hand>. Для удобс­тва сег­менты луч­ше рас­полагать в отдель­ных стро­ках; отбить стро­ку в зап­росе мож­но нажати­ем Shift-Enter.

Пос­ле токена <segmentation:> идет тек­сто­вый зап­рос, в котором мож­но опи­сать жела­емый объ­ект. Если оста­вить зап­рос пус­тым, прог­рамма отри­сует объ­ект, осно­выва­ясь на исходном изоб­ражении.

info

При желании для рас­позна­вания и сег­мента­ции мож­но исполь­зовать и модели ар­хитек­туры Yolo, а для отри­сов­ки объ­ектов — под­клю­чить отдель­ную модель.

Пе­ред исполь­зовани­ем сег­мента­ции обя­затель­но вклю­чи две нас­трой­ки в раз­деле Regional Prompting: Segment Mask Blur (по умол­чанию 10) и Segment Mask Grow (как пра­вило, ука­зыва­ют зна­чение от 4 до 16 пик­селей). Segment Mask Grow ука­зыва­ет количес­тво пик­селей, на которые будет «раз­дви­нута» мас­ка рас­познан­ного объ­екта, а вклю­чение Segment Mask Blur поможет избе­жать рез­ких кон­туров на гра­ницах объ­ектов.

При­мер исполь­зования:

a photo of a man petting a cat in a park in autumn, amber glow, falling leaves
<segment:cat> hd photo of a cat, beautiful, film grain, furry masterpiece
<segment:man's face> a close up photo of a man's face, beautiful, film grain, masterpiece

В про­цес­се будут рас­позна­ны и деталь­но отри­сова­ны кот и муж­ское лицо.

Ре­зуль­тат: пушис­тый кот и пред­ста­витель­ный муж­чина.

А если зап­рос (с тем же сидом) сос­тавить таким же и заменить на фото кота лисен­ком — но не в основном зап­росе, а в сег­менте?

a photo of a man petting a cat in a park in autumn, amber glow, falling leaves
<segment:cat,0.8,0.5> hd photo of a fox, beautiful, film grain, furry masterpiece
<segment:man's face> a close up photo of a man's face, beautiful, film grain, masterpiece
<segment:hand> a close up photo of a man's hand petting a fox

По­лучи­лось! Муж­чина тот же, а вмес­то кота — впол­не узна­ваемый лис.

По­играв нас­трой­ками Segment Mask Grow и Segment Mask Blur, мож­но добить­ся прак­тичес­ки иде­аль­ного резуль­тата (в при­мере выше я это­го не делал, так что арте­фак­ты весь­ма замет­ны), при этом основное изоб­ражение пов­торно генери­ровать­ся не будет — прог­рамма возь­мет изна­чаль­ную кар­тинку из кеша.

За­чем это может понадо­бить­ся? Нап­ример, для замены объ­екта, если при генера­ции исполь­зовать Init Image; впро­чем, это тема для отдель­ной беседы.

Конфиги и пресеты

Серь­езная проб­лема WebUI/Forge — мож­но сох­ранить толь­ко один набор нас­тро­ек. Воз­можность сох­ранять раз­ные кон­фиги в WebUI реали­зует­ся сто­рон­ними рас­ширени­ями; ни одно из них не совер­шенно, и для сох­ранения ряда нас­тро­ек тре­бует­ся вруч­ную редак­тировать кон­фиг‑файл уже самого рас­ширения. В SwarmUI сох­ранить нас­трой­ки про­ще прос­того: дос­таточ­но открыть вклад­ку Presets в ниж­ней час­ти экра­на и нажать Create New Preset, пос­ле чего в появив­шемся окне выб­рать те нас­трой­ки, которые будут вос­ста­нов­лены при выборе дан­ного пре­сета.

Ин­терес­ная осо­бен­ность: мож­но выб­рать (и вос­ста­новить) нес­коль­ко пре­сетов одновре­мен­но; полез­но, нап­ример, если в одном пре­сете хра­нит­ся тип модели и нас­трой­ки для нее, в дру­гом — нас­трой­ки апскей­ла и так далее.

По­жалуй, на этом сегод­няшний рас­сказ о SwarmUI мож­но завер­шить, но в интерфей­се есть еще мно­го инте­рес­ного. Если тебе пон­равит­ся SwarmUI — поль­зуйся! Для отно­ситель­но нес­ложных вещей он впол­не спо­собен заменить WebUI, а для слож­ных ник­то не меша­ет перек­лючить интерфейс в режим диаг­раммы Comfy Workflow с его пол­ным кон­тро­лем над про­цес­сом или запус­тить WebUI.

Ждем Stable Diffusion 3 или не ждем?

Ждем! Раз­нооб­разие — это хорошо. Нес­мотря на огромный объ­ем, у модели Flux есть свои огра­ниче­ния. Ее тяжело, дорого (в силу повышен­ных тре­бова­ний к виде­опа­мяти) и невыгод­но (из‑за лицен­зии) обу­чать, поэто­му про­изводных моделей на осно­ве Flux, ско­рее все­го, будет огра­ничен­ное количес­тво — если они вооб­ще появят­ся, в чем раз­работ­чики Stability AI пуб­лично усом­нились.

У раз­работ­чиков Flux свое понима­ние того, что явля­ется «безопас­ным»: по их мне­нию, жен­ская грудь боль­шой опас­ности для жиз­ни на пла­нете не пред­став­ляет, а вот дип­фей­ки — вещь неп­рият­ная; соот­ветс­твен­но, из тек­сто­вого декоде­ра были уда­лены име­на актрис и мно­гих медий­ных пер­сон. Кро­ме того, есть и нес­коль­ко чис­то тех­ничес­ких огра­ниче­ний (воз­можно, вре­мен­ных): CFG дол­жен быть равен еди­нице, а негатив­ные клю­чевые сло­ва в модели FLUX.1 [dev] не под­держи­вают­ся. Наконец, у Flux, по край­ней мере в ее пер­вой вер­сии, не слиш­ком хорошо обсто­ят дела с понима­нием изоб­разитель­ных сти­лей, художес­твен­ных нап­равле­ний и сти­лиза­ции под твор­чес­тво кон­крет­ных худож­ников, вклю­чая клас­сиков.

Для срав­нения — три кар­тинки, один и тот же зап­рос (стим­панк, сепия, робопа­ук, ста­рое фото).

Flux
Flux

Даль­ше — работа базовой модели Stable Cascade, незас­лужен­но забытой побоч­ной вет­ки Stable Diffusion.

Stable Cascade
Stable Cascade

На­конец, такой резуль­тат выдала одна из сов­ремен­ных моделей на осно­ве SDXL — резуль­тат года работы сооб­щес­тва, «допилив­шего» базовую модель SDXL до впол­не при­лич­ного сос­тояния.

SDXL
SDXL

Выводы

Но­вая модель хороша! Вне­зап­но появив­шись из ниот­куда, Flux попол­нила ряды моделей нового поколе­ния, прев­зой­дя AuraFlow, Hunyuan-DiT, Kolors и PixArt. Основной воп­рос, который вол­нует сооб­щес­тво поль­зовате­лей, — воз­можно ли обу­чение новой модели, и если воз­можно, то какие ресур­сы для это­го пот­ребу­ются?

Ес­ли обу­чение ока­жет­ся воз­можным, то у Flux появит­ся шанс занять нишу, которая проч­но окку­пиро­вана моделя­ми на базе SDXL. Если же обу­чение ока­жет­ся чрез­мерно тру­доем­ким или дорогос­тоящим, то рано или поз­дно (ско­рее — рано, учи­тывая ско­рость раз­вития тех­нологий ИИ) впе­ред выр­вется одна из аль­тер­натив­ных моделей.