Всё это создала одна Krea 2 Turbo на Mac mini M4 с 32 ГБ объединённой памяти. Один квадрат 1024×1024 занимал примерно семь минут.
Для масштаба: в предыдущем эксперименте один рендер Ideogram 4 размером 2048×2048, в режиме Quality и с 48 шагами, занял на том же Mac 384 минуты 55 секунд. Это не сравнительный бенчмарк — всего один реальный запуск. Просто после такого ожидания семь минут действительно начинают ощущаться как Turbo.
Но самый опасный баг в новом проекте тоже создавал красивые картинки. Всего пять токенов из 512 получали неправильные позиции. Тест показывал почти идеальное совпадение, результат выглядел нормально, а после исправления тот же prompt и seed изменили 99,32% пикселей.
Так появилась Twisterminigen — нативная студия для Krea 2 на Swift, SwiftUI и MLX. Без Python внутри приложения, без облачного inference и без права считать красивую картинку доказательством правильной математики.
Это продолжение моих предыдущих экспериментов с локальными генераторами на Mac: FLUX.2 Klein, Typhoonminigen 2.0 и Ideogram 4
Почему Krea 2
У многих генераторов довольно быстро обнаруживается любимый почерк. Картинки хорошие, но после нескольких десятков попыток начинаешь узнавать одну и ту же кожу, свет и композицию, а иногда и даже лицо.
Krea 2 меня зацепила диапазоном. Один Turbo-checkpoint может уйти в архитектуру, предметную фотографию, fashion, аниме или почти документальный пейзаж без постоянной смены моделей. По моему мнению Krea 2 хорошо отрабатывает на лицах, лучше чем Ideogram и Flux 2 Klien.
Официально семейство состоит из Raw и Turbo. Raw — недистиллированная база для fine-tuning и обучения LoRA. Turbo — версия для быстрого inference: восемь шагов и CFG 0. В Twisterminigen я сознательно оставил только Turbo и применение готовых LoRA. Превращать приложение ещё и в тренер не планировал.
Prompts можно писать обычным языком: что находится в кадре, из чего сделано, где стоит камера и откуда идёт свет. Есть и забавная техническая деталь: при штатном CFG 0 negative prompt математически не участвует в генерации. Поэтому пожелания вроде empty room, no people нужно писать в основном prompt, а не надеяться на отдельное поле.
Три темы, один интерфейс
Twisterminigen — нативное приложение на SwiftUI, а не WebView над Python-скриптом. В верхнем меню собраны восемь основных разделов: Generate, Queue, Gallery, Presets, Models, LoRA, System и Help. Внизу постоянно видна локальная телеметрия: загрузка CPU и GPU, расход общей памяти, состояние MLX и свободное место на диске.
Интерфейс можно переключать между тремя темами: Dark, Light и Glass. Glass выглядит так, будто северное сияние случайно попало внутрь окна macOS; для более спокойной работы остаются обычные тёмная и светлая темы. Меняется не только фон: под тему адаптируются холст, панели, границы и контраст элементов.
Картинка была красивой. Математика — нет
Упрощённо pipeline выглядит так:
prompt → Qwen3-VL-4B → 12,9B DiT → Qwen-Image VAE → PNG
Qwen превращает текст в conditioning. Diffusion transformer восемь раз уточняет latent, а VAE декодирует его в пиксели.
Официальная реализация Krea 2 написана на Python и PyTorch. В Twisterminigen каждый этап работает на Swift и MLX. Python оставался только oracle — проверочным калькулятором во время разработки: официальный код считает промежуточный тензор, Swift считает свой, тест сравнивает результаты. В самом приложении Python-процесса нет.
Я также не буду изображать, будто вручную набрал весь Swift-код. Большую часть изменений готовил Codex модель GPT‑5.6 Sol под моим управлением. Я задавал поведение, разбивал работу на проверяемые этапы, сверял математику и принимал или отклонял результат. Это важная оговорка: Codex очень быстро реализует не только правильные решения, но и убедительные ошибки.
Одна из них спряталась в text encoder. Упакованный вход Qwen выглядел примерно так:
[prefix | prompt | PAD в середине | 5 служебных токенов]
Padding не должен занимать позиционные номера RoPE — механизма, который сообщает трансформеру порядок токенов. Но последние пять полезных токенов получали позиции около 541…545 вместо продолжения prompt примерно с 41…45.
Старый тест этого не заметил. Он захватывал несколько PAD-токенов и одновременно выбрасывал те самые пять полезных токенов. Общая cosine similarity всё равно выглядела почти идеальной: ошибочны были только 5 из 512.
После исправления token IDs, attention mask и position IDs совпали с официальным oracle бит-в-бит. F32-представления Swift и PyTorch на всех 12 проверяемых выходах text encoder дали cosine similarity не ниже 0,9999999.
Но same-seed PNG после исправления изменился на 99,32% пикселей.
Обе картинки выглядели нормально. С этого момента красивый PNG остался приятным результатом, но перестал считаться доказательством правильного порта.
Как 31,18 ГиБ весов уместились в 32 ГБ памяти
Экран Models выглядит немного угрожающе: четыре проверенных файла занимают 31,18ГБ.
В Models доступны два варианта Krea 2 Turbo: более компактный Default mixed-4/8 и более тяжёлый Best Fidelity q8. Перед первой генерацией необходимо прочитать и принять Krea 2 Community License Agreement и Acceptable Use Policy. Пока приложение не сохранит актуальное подтверждение и не проверит все необходимые файлы по размеру и SHA-256, Generate, Queue и запуск пресетов остаются заблокированными. Если условия лицензии изменятся, их потребуется принять заново.
Но в эту цифру входят общие Qwen и VAE плюс два альтернативных DiT:
-
Default mixed-4/8;
-
Best Fidelity q8.
Для одного рендера выбирается только один. Второй просто лежит на диске.
И размер файлов нельзя напрямую вычитать из unified memory. Во время работы появляются активации, attention-буферы, латенты, деквантизация и кеш MLX. Плюс macOS почему-то тоже требовалась память.
Поэтому тяжёлые стадии заходят по очереди:
Qwen создаёт conditioning → освобождаетсяDiT выполняет 8 шагов → освобождаетсяVAE декодирует PNG
Между этапами остаются только нужные тензоры. Единый inference-координатор не разрешает двум тяжёлым MLX-операциям одновременно бороться за GPU и память.
В same-seed тесте q8 потребовал примерно на 4,1 ГиБ больше памяти, но завершил 1024×1024 без нового swap и ухудшения memory pressure. Называть его быстрее я не стал: q8 запускался вторым и мог воспользоваться прогретым файловым кешем. Best Fidelity означает более точные веса, а не гарантированно более красивую картинку.
Одинаковый seed — не паспорт персонажа
Первая версия Character Sheet создавала три независимых задания: Front, Back и Portrait. Prompt и seed были одинаковыми, поэтому идея казалась логичной.
На практике модель могла нарисовать трёх слегка разных людей.
После пяти листов и пятнадцати долгих рендеров выяснилось, что seed воспроизводит начальный шум, а не выдаёт персонажу паспорт. Старую архитектуру я удалил.
Теперь Character Sheet — это один prompt, один canvas 1280×720 и один inference job. Front, Back и Portrait рождаются внутри общего кадра, поэтому модель одновременно видит лицо, одежду и пропорции.
Regional Prompts работают по похожему принципу: на холсте можно разместить до восьми областей и дать каждой собственное описание. Это не восемь склеенных картинок и не маски Photoshop. Весь кадр рождается в одном денойзинге, поэтому области направляют композицию, но волосы, одежда или фон могут пересечь границу.
PNG без рецепта быстро превращается в мусор
Через неделю уже невозможно вспомнить, какой prompt, seed, tier модели, LoRA и размер дали удачный результат. Поэтому основной единицей Twisterminigen стал не PNG, а immutable recipe — неизменяемый снимок генерации.
Рядом с изображением сохраняются prompt, seed, размер, модель, шаги, LoRA, Regions и Remix-родословная. Настройки можно вернуть в Generate, сохранить как preset или отправить в Queue. Редактирование текущего prompt не меняет уже сохранённую задачу.
Именно здесь генератор превращается в приложение, а не в кнопку над моделью.
Пресеты вместо папки с prompt.txt
Начиналось всё с нескольких примеров, а закончилось небольшой локальной библиотекой: 243 карточки в 17 разделах — от интерьеров, архитектуры и предметной съёмки до аниме, спорта и Character Sheet. Пресет здесь не фильтр поверх готовой картинки, а полный recipe: prompt, seed, размер, модель, шаги, LoRA, Regions и Remix-зависимости. Его можно загрузить в Generate или сразу отправить в Queue. При этом встроенным каталогом пользователь не заперт: можно создавать собственные карточки и разделы, выбирать обложки из Gallery, редактировать их или навсегда удалять отдельные пресеты и целые категории — вплоть до полной замены встроенного каталога собственной библиотекой.
Когда одной кнопки Generate мало
Когда один кадр рендерится около семи минут, очередь быстро перестаёт быть приятным дополнением. Каждое задание сохраняется как отдельный неизменяемый recipe: с prompt, seed, моделью, LoRA, Regions и Remix-источником. Поэтому можно продолжать редактировать Generate, не меняя уже запланированные работы.
Ожидающие задания можно редактировать, дублировать, переставлять и удалять. Очередь переживает перезапуск приложения, а Stop after current завершает текущий рендер и оставляет остальные задания на месте. Отдельный Queue Lab собирает сетки экспериментов до 64 работ, меняя по одному параметру: seed, число шагов, Remix Strength или вес LoRA.
LoRA в Twisterminigen тоже является частью реального inference-пути, а не декоративным переключателем. Можно импортировать совместимые .safetensors, открыть каталог официальных Krea Styles, собрать стек до восьми адаптеров, изменить их порядок, силу влияния и trigger phrases. Выбранный стек сохраняется внутри recipe.
Обучения LoRA в приложении нет намеренно. Twisterminigen умеет импортировать и применять готовые адаптеры, а подготовку датасета и весь training workflow я сознательно оставил внешним инструментам. Иначе компактная локальная студия быстро превратилась бы в отдельный проект — и ещё несколько бессонных ночей или недель.
Раздел Help получился не страницей с двумя горячими клавишами, а встроенной документацией. Первый запуск сопровождает тур из 12 экранов: от лицензии и подключения весов до Remix, Regions, LoRA, Queue, Presets, Gallery, Storage Manager и приватности. После него остаются 15 справочных карточек с короткими правилами и ограничениями каждой функции.
Для source-only приложения это особенно важно: справка объясняет не только куда нажимать, но и почему Generate остаётся недоступной, пока пользователь не принял условия Krea 2 и приложение не проверило все необходимые веса.
Что получилось
Сильная сторона Krea 2 — широкий визуальный диапазон, нормальный естественный язык и восьмишаговый Turbo. На моём Mac это всё ещё минуты, а не облачные секунды, но уже вполне рабочий цикл для локальных экспериментов.
Ограничения никуда не исчезли. Текст на изображении не гарантирован. Character Sheet не фиксирует личность математически. Regional Prompts остаются мягкими. 2K заметно повышает требования к unified memory. Удачный seed всё ещё приходится искать.
Публичный релиз Twisterminigen получился source-only: без готового .app, .dmg и модельных весов. Код приложения опубликован отдельно под MIT, а совместимые веса Krea 2 пользователь получает и лицензирует самостоятельно. После установки prompts, исходные изображения, recipes и генерации остаются на Mac.
В Twisterminigen самой простой частью оказалась кнопка Generate.
Самой дорогой — доказательство того, что за ней действительно работает тот pipeline, который я собирался перенести.
ссылка на оригинал статьи https://habr.com/ru/articles/1064434/