Шесть часов на один рендер: как я собрал нативную студию Ideogram 4 на Swift и MLX. Apple Silicon.. Apple Silicon. Cyclonminigen.. Apple Silicon. Cyclonminigen. Ideogram 4.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source. Swift.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source. Swift. генерация изображений.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source. Swift. генерация изображений. искусственный интеллект.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source. Swift. генерация изображений. искусственный интеллект. локальный ИИ.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source. Swift. генерация изображений. искусственный интеллект. локальный ИИ. Машинное обучение.. Apple Silicon. Cyclonminigen. Ideogram 4. macOS. mlx. Open source. Swift. генерация изображений. искусственный интеллект. локальный ИИ. Машинное обучение. Обработка изображений.

Эта картинка рисовалась на моём Mac 384 минуты 55 секунд.

Портрет в окне Image details; указаны Quality, 48 шагов и время генерации 384 минуты 55 секунд.
Quality, 48 шагов, 2048×2048 — 384 минуты 55 секунд, почти шесть с половиной часов.

Приложение не зависло. Metal не упал. Рендер честно дошёл до 48-го шага и выдал портрет размером 2048×2048. Просто за время ожидания я успел поработать, поесть, поспать и вернуться к той же девушке в кафе. Она всё ещё рисовалась.

Так я понял, что главная задача моей новой локальной студии — не добавить ещё одну кнопку Generate. Нужно было сделать тяжёлую модель предсказуемой для живого человека и не превратить Mac с 32 ГБ памяти в дорогую грелку с пляжным мячом.

Это продолжение моего странного эксперимента: Mac + Swift + MLX = локальный inference без Python-процесса и облачного API. В первой статье я рассказывал, как три ночи чинил картинки, которые на самом деле не были сломаны. Во второй — как сам придумал главное ограничение своего приложения, поверил в него и даже написал для него тултип.

Теперь эксперимент добрался до Ideogram 4.

Главное окно Cyclonminigen с боковой навигацией, панелью генерации и показателями CPU, GPU и памяти.

Главное окно Cyclonminigen 1.1 (build 19): генерация, настройки композиции и локальная телеметрия в одном нативном интерфейсе.

Зачем ещё один генератор

После Typhoonminigen мне не хотелось делать тот же интерфейс вокруг модели потяжелее. В Ideogram 4 меня заинтересовали две вещи: типографика и композиция.

Cyclonminigen 1.1 (build 19): главное окно со скрытой навигацией, быстрыми инструментами и локальной телеметрией.
Cyclonminigen 1.1 (build 19): главное окно со скрытой навигацией, быстрыми инструментами и локальной телеметрией.
Финальная версия 1.1 (build 19): раскрытая панель Fine-tuning с размером холста, пресетом, режимом скорости, Dual CFG и Live Preview.

Финальная версия 1.1 (build 19): раскрытая панель Fine-tuning с размером холста, пресетом, режимом скорости, Dual CFG и Live Preview.

Модель умеет генерировать изображение сразу на холсте до 2048 пикселей по каждой стороне, работать со структурированными caption и принимать приблизительное расположение объектов через bounding boxes. Из этого получаются вывески, плакаты, character sheet, схемы и сцены, в которых можно заранее попросить: персонаж слева, машина справа, заголовок сверху.

Под капотом это тоже не обычный «один трансформер и один сэмплер». Официальный качественный путь использует asymmetric dual-CFG — два transformer-компонента с собственными файлами весов:

  • conditional-трансформер получает текстовое conditioning и латент изображения;

  • unconditional-трансформер получает тот же латент, но нулевое текстовое conditioning;

  • их направления смешиваются с guidance и обновляют латент.

Unconditional здесь — не negative prompt. Это отдельная ветка модели без пользовательского отрицательного текста.

Я перенёс пайплайн в Swift, опираясь на mflux как основной MIT-референс и на официальный ideogram-oss как математический oracle. UI, orchestration и inference работают в одном приложении через MLX-Swift и Metal. Во время рендера Python-процесс не запускается. Но называть проект «написанным полностью с нуля» было бы нечестно: в нём есть явно атрибутированные компоненты под лицензиями MIT и Apache 2.0, а Python используется в проверочных oracle-скриптах разработки.

Моя цель была не победить ComfyUI или доказать, что Swift быстрее Python. Я хотел проверить другое: можно ли собрать Ideogram 4 как обычное macOS-приложение с очередью, Gallery, воспроизводимыми рецептами генерации и контролем памяти — без отдельного Python runtime.

Шесть часов. И это не было ошибкой

Ideogram 4 поддерживает нативную генерацию до 2048×2048 без обязательного апскейла. В квадрате это четыре мегапикселя. Разумеется, первым делом мне захотелось проверить потолок. Раз кнопка есть — надо нажать.

Эксперимент проходил на Mac mini с базовым Apple M4, 10-ядерным CPU, 10-ядерным GPU и 32 ГБ unified memory. Использовался официальный FP8-checkpoint Ideogram 4. Штатным путём той development-сборки был полный dual-CFG, но старый формат Gallery не сохранял transformer mode для каждого запуска. Три запуска были сделаны 27–28 июня, ещё до финального релиза 1.1.

Это важно: сохранились Gallery-записи и скриншоты. Вместе они подтверждают промпт, seed, размер, пресет, число шагов, guidance 7.0 и показанное приложением время. Старый формат не сохранял Render Speed, transformer mode и частоту Live Preview. Точную версию macOS на момент запусков я тоже не зафиксировал. Поэтому ниже — не «лабораторный бенчмарк», а три наблюдения из реальной разработки.

Промпт и размер оставались одинаковыми, но seed различался. Следовательно, сравнивать качество портретов нельзя. Сравнивать можно только сохранённое приложением время render path — не полное время с ожиданием в очереди, подготовкой Magic Prompt и записью результата. Каждый режим запускался один раз — n=1.

Пресет

Шаги

Seed

Время, мин:с

Примерно на шаг

Turbo

12

3434324324324

92:49

7:44

Default

20

604856127754352017

156:31

7:50

Quality

48

34983479379457439

384:55

8:01

Портрет в окне Image details; указаны Turbo, 12 шагов, размер 2048 на 2048 и время 92 минуты 49 секунд.

Turbo, 12 шагов, 2048×2048 — 92 минуты 49 секунд.
Портрет в кафе, сгенерированный в режиме Default за 156 минут 31 секунду при размере 2048 на 2048.

Default, 20 шагов, 2048×2048 — 156 минут 31 секунда.

В этой серии время росло почти вместе с числом шагов. Но сами официальные пресеты отличаются не только длиной: у них разные параметры noise schedule и финальные участки guidance. Поэтому утверждать «48 шагов ровно в четыре раза тяжелее 12» нельзя. Можно сказать лишь: на моей машине в этих трёх запусках получилось именно так.

Я пробовал кэширование, разные схемы загрузки и освобождения весов, режимы скорости и варианты квантизации. Где-то удавалось откусить проценты. Чуда не произошло: шесть часов не превратились в один.

Панель Fine-tuning в версии 1.1. Прогноз времени зависит от пресета и Render Speed и не является результатом замера.

Панель Fine-tuning в версии 1.1. Прогноз времени зависит от пресета и Render Speed и не является результатом замера.
Default, 20 шагов, Normal: прогноз интерфейса — около 24 минут. Это оценка UI, а не измеренный бенчмарк.

Default, 20 шагов, Normal: прогноз интерфейса — около 24 минут. Это оценка UI, а не измеренный бенчмарк.
Тот же Default и 20 шагов, режим Fast: прогноз интерфейса — около 18 минут.

Тот же Default и 20 шагов, режим Fast: прогноз интерфейса — около 18 минут.
Тот же Default и 20 шагов, режим Faster: прогноз интерфейса — около 14 минут.

Тот же Default и 20 шагов, режим Faster: прогноз интерфейса — около 14 минут.

Практическое решение оказалось продуктовым. Я вынес три официальных пресета Ideogram в основной выбор: Turbo 12, Default 20 и Quality 48. Custom позволяет идти дальше, вплоть до 100 шагов, но кнопка существует не потому, что её обязательно нужно нажимать.

Для масштаба приведу ещё два отдельных запуска Turbo 12 / Normal: 11 минут 39 секунд при 1152×768 и 13 минут 45 секунд при 1024×1024. Это были разные сцены и seed, поэтому две точки нельзя считать диапазоном производительности или тестом влияния разрешения. Но как ориентиры они куда полезнее шестичасового портрета.

Отдельный реальный запуск: Turbo, 12 шагов, 1152×768 — 11 минут 39 секунд. Сцена и seed отличаются от соседнего запуска.

Отдельный реальный запуск: Turbo, 12 шагов, 1152×768 — 11 минут 39 секунд. Сцена и seed отличаются от соседнего запуска.
Отдельный реальный запуск: Turbo, 12 шагов, 1024×1024 — 13 минут 45 секунд.

Отдельный реальный запуск: Turbo, 12 шагов, 1024×1024 — 13 минут 45 секунд.

32 ГБ: почему Mac вообще не умер

Полный FP8-набор основных файлов занимает около 27,5 GB в десятичных единицах, то есть примерно 25,6 GiB на диске: text encoder, conditional- и unconditional-трансформеры, VAE и tokenizer. Напрямую вычитать этот объём из 32 ГБ unified memory нельзя. Файлы загружаются поэтапно, а к их представлению в памяти добавляются активации, conditioning, латент, промежуточные направления, буферы VAE, кеш MLX и сама macOS, которая тоже почему-то хочет жить.

Секрет в том, что все тяжёлые компоненты не находятся в unified memory одновременно.

prompt
  ↓
tokenizer → фиксированный Qwen3-VL-8B → conditioning → encoder освобождается
                                                  ↓
latent → conditional DiT → выгрузка → unconditional DiT → выгрузка
   ↑                                                             ↓
   └────────────────────────── N шагов ───────────────────────────┘
                                                  ↓
                                             VAE decode
                                                  ↓
                                                 PNG

Это упрощённый text-to-image путь. В img2img VAE encoder работает до денойзинга, а decoder может использоваться во время шагов для live preview и внутренних проверок технической заглушки. Полноразмерный финальный decode всё равно выполняется после трансформеров.

32 ГБ здесь скорее не квартира, куда я чудом поселил весь checkpoint вместе с мебелью, а маленькая гримёрка. Сначала туда входит Qwen3‑VL, читает caption и уходит. Затем на каждом шаге по очереди заходят два трансформера: один с текстом, второй без него. После денойзинга они освобождаются перед полноразмерным финальным VAE decode; небольшие веса VAE при этом могли загружаться раньше для encode или preview.

И тут появляется лучший сюжетный поворот: VAE весит на диске всего около 160Mb, но при финальном декоде 2048×2048 он становится главным источником пика. Watchdog использует консервативную оценку примерно 24,3Gb для footprint всего render-процесса на этой стадии — это не изолированный размер весов или активаций VAE. Самый маленький актёр привёз самую большую декорацию.

Экран Models со включённым Dual CFG и пятью установленными компонентами Ideogram 4.

Экран Models: два трансформера, Qwen3-VL-8B text encoder, VAE и tokenizer относятся к основному Ideogram checkpoint; локальный Magic Prompt assistant хранится отдельно.

Приложение ограничивает кеш MLX, проверяет прогноз памяти до старта и следит за footprint процесса — объёмом реально занятой им памяти — между шагами. Но это защита, а не математическая гарантия для любой фоновой нагрузки. Отмену можно проверить до и после финального VAE decode. Нажатие Stop во время синхронного MLX-вызова не прерывает его посередине: приложение может лишь дождаться завершения и отбросить результат.

Есть экспериментальный режим Conditional only. Он может работать без файла весов unconditional-трансформера и пропускает проход этой ветви, поэтому экономит диск и время. Однако пик RAM не обязан уменьшиться вдвое: в dual-CFG трансформеры и так загружаются по одному, а главным пиком на 2K может стать финальный декод. Картинка также меняется — это не более дешёвый эквивалент официального dual-CFG.

Выбираемые локальные помощники используются для Magic Prompt и Describe. Они не заменяют фиксированный text encoder Ideogram и сами не рисуют изображения.

Выбираемые локальные помощники используются для Magic Prompt и Describe. Они не заменяют фиксированный text encoder Ideogram и сами не рисуют изображения.
Пустой менеджер LoRA до импорта адаптеров. Экран показывает интерфейс управления, но не демонстрирует качество или скорость LoRA-инференса.

Пустой менеджер LoRA до импорта адаптеров. Экран показывает интерфейс управления, но не демонстрирует качество или скорость LoRA-инференса.

JSON как интерфейс к модели

У Ideogram 4 есть ещё одна необычная особенность: модель обучалась на структурированных описаниях в формате caption. Обычный текст она тоже принимает, но официальная схема позволяет отдельно описать сцену, стиль, фон, элементы и их координаты.

Упрощённо caption выглядит так:

{
  "high_level_description": "a continuous rainy neon street at night",
  "style_description": {
    "aesthetics": "cinematic, photorealistic",
    "lighting": "soft neon reflections on wet surfaces",
    "photo": "cinematic street photograph, 35 mm lens",
    "medium": "photograph"
  },
  "compositional_deconstruction": {
    "background": "wet asphalt, shop windows and distant city lights",
    "elements": [
      {"type": "obj", "bbox": [180, 70, 820, 430], "desc": "a female pilot"},
      {"type": "obj", "bbox": [420, 380, 900, 930], "desc": "a sports car"}
    ]
  }
}

Координаты нормализованы в диапазоне 0…1000 и записаны как [ymin, xmin, ymax, xmax]. Для этой schema важны не только типы полей, но и порядок ключей.

Редактор structured caption: JSON разбит на смысловые поля и проверяется по схеме до запуска рендера.

Редактор structured caption: JSON разбит на смысловые поля и проверяется по схеме до запуска рендера.

Это тот же фиксированный Qwen3-VL-8B, который уже был показан в memory pipeline: он кодирует caption перед каждым рендером, а его vision tower здесь не используется. Выбираемые Gemma, Qwen3-VL 4B и Qwen3.6 — отдельные локальные помощники. Magic Prompt превращает обычную фразу в JSON, а Describe по явной команде описывает фотографию. Сами изображения эти помощники не рисуют.

Реальный Turbo-рендер: 1024×1024, 12 шагов, 13 минут 53 секунды. Это визуальная сцена, а не технически достоверная схема автомобильного производства.

Реальный Turbo-рендер: 1024×1024, 12 шагов, 13 минут 53 секунды. Это визуальная сцена, а не технически достоверная схема автомобильного производства.
Реальный тест типографики: крупный заголовок читается, часть мелких подписей искажена. 73% — оценка распознавания текста, а не качества всей картинки.

Реальный тест типографики: крупный заголовок читается, часть мелких подписей искажена. 73% — оценка распознавания текста, а не качества всей картинки.

Структурированный caption оказался полезен и при неприятном поведении checkpoint. Иногда вместо изображения он возвращает технический refusal frame Image blocked by safety filter. В официальном prompting guide отдельно отмечена более высокая частота ложных срабатываний у не-JSON-промптов.

В моих локальных тестах структурирование caption заметно уменьшило число таких случаев, но не устранило их полностью. Это наблюдение, а не статистический бенчмарк. Cyclonminigen распознаёт известную техническую заглушку и не сохраняет её как успешный результат. Это не NSFW-модерация и не попытка отключить safety-механизмы модели.

Как просьба «не рисовать коллаж» помогла нарисовать коллаж

Самая полезная ошибка случилась уже после первой публикации.

Я добавил Regions: пользователь рисует области на холсте, помечает их как Object или Text, а приложение превращает проценты X/Y/W/H во внутренние bbox модели. На словах всё выглядело прекрасно. На практике несколько реальных рендеров вместо одной сцены выдали набор панелей, фрагментов и повторяющихся объектов.

Ранний development-интерфейс Regions. В финальной 1.1 появились точные X/Y/W/H, явный выбор Object/Text, All Object и предупреждения.

Ранний development-интерфейс Regions. В финальной 1.1 появились точные X/Y/W/H, явный выбор Object/Text, All Object и предупреждения.
Предрелизный QA-кадр после исправления: четыре Object-области с редактируемыми координатами X/Y/W/H.

Предрелизный QA-кадр после исправления: четыре Object-области с редактируемыми координатами X/Y/W/H.

Сначала подозрение упало на seed, Turbo и плотность компоновки. Но проблема повторилась и на Default. Значит, часы рендера можно было продолжать тратить, но расследованию это уже не помогало.

Причина оказалась в моём caption builder. Я повторял персонажей и предметы одновременно в общем описании, background и elements. Более того, пытаясь запретить нежелательный результат, добавлял в положительный caption слова вроде collage, panels, checkerboard и isolated fragments — только внутри фраз «не делай это».

По воспроизводимому результату я сделал вывод, что сами визуальные токены работали как положительные подсказки, несмотря на отрицание вокруг них. Исправление caption и последующие реальные тесты подтвердили эту рабочую гипотезу.

Упрощённо ошибка выглядела так:

"background": "a pilot and a sports car on a neon street, no collage, no panels, no checkerboard",
"elements": [
  {"type": "obj", "bbox": [...], "desc": "a pilot"},
  {"type": "obj", "bbox": [...], "desc": "a sports car"}
]

Исправлением стало не ещё одно отрицание, а удаление нежелательных визуальных терминов из положительного caption. Внутри compositional_deconstruction подробные описания областей живут в elements, а background описывает только непрерывную среду и не повторяет их.

После исправления я провёл реальные тесты с 4, 6 и 10 областями. Четыре объекта собрались в одну гостиную. Плотная сцена с десятью предметами осталась изображением одного стола, хотя маленькие детали модель всё ещё может потерять или объединить. Это уже ограничение мягкого bbox-conditioning, а не прежний баг caption builder.

Единая гостиная с кремовым диваном, латунным торшером, деревом в горшке и овальным журнальным столом.

Проверка Regions после исправления: диван, торшер, оливковое дерево и стол собрались в одной непрерывной комнате. 1024×1024, Turbo, 15,2 минуты.

Этот эпизод напомнил мне простую вещь: иногда проблема не в модели, seed или sampler. Иногда вы слишком выразительно рассказали нейросети, чего именно не хотите увидеть.

Предрелизный стресс-тест: камера, блокнот и компас случайно отмечены как Text. Это фиксация найденной UI-проблемы, а не рекомендуемая настройка.

Предрелизный стресс-тест: камера, блокнот и компас случайно отмечены как Text. Это фиксация найденной UI-проблемы, а не рекомендуемая настройка.
Плотный QA-тест с десятью областями: получился один стол вместо набора панелей. Default, 1024×1024, 29,8 минуты; часть мелких предметов модель могла объединить.

Плотный QA-тест с десятью областями: получился один стол вместо набора панелей. Default, 1024×1024, 29,8 минуты; часть мелких предметов модель могла объединить.
Предрелизный QA-рендер: области собрались в одну цветочную лавку, но надпись получилась «ЦВЕТЫ И ВКУСНЯШКИ». Геометрия исправлена, точная типографика — нет.

Предрелизный QA-рендер: области собрались в одну цветочную лавку, но надпись получилась «ЦВЕТЫ И ВКУСНЯШКИ». Геометрия исправлена, точная типографика — нет.

Что осталось полезным, кроме долгого ожидания

После всех расследований Cyclonminigen всё-таки остался приложением, а не коллекцией тестовых утилит.

Character Sheet

Приложение формирует character sheet как одну большую структурированную генерацию: Turnaround ×5, Heads + body или Board 3×3. За счёт общего холста одежда, свет и окружение часто остаются похожими между панелями.

Character Sheet в версии 1.1: Turnaround ×5, Heads + body и Board 3×3 формируются как один общий холст.

Character Sheet в версии 1.1: Turnaround ×5, Heads + body и Board 3×3 формируются как один общий холст.
Turnaround ×5 внутри одной генерации: костюм в целом сохраняется, но детали и служебный заголовок искажены. Это не identity lock.

Turnaround ×5 внутри одной генерации: костюм в целом сохраняется, но детали и служебный заголовок искажены. Это не identity lock.

Но это не identity lock и не память персонажа. Рука может измениться, ремень — переехать, а меч — внезапно получить собственное мнение о длине.

Раскадровка три на три с одним самураем в горной долине, показанным общим, средним, крупным и верхним планами.

Board 3×3: один самурай в девяти планах внутри одной генерации. Это общий холст и согласованный caption, а не память об идентичности.

Photo → Image

Это настоящий latent img2img. VAE кодирует фотографию в латент, смешивает его с воспроизводимым шумом, после чего запускается тот же пайплайн денойзинга. Низкий Strength обычно сохраняет больше композиции, высокий позволяет уйти дальше. Это не процент сохранённых пикселей и не гарантия побитовой копии: даже VAE roundtrip способен изменить изображение.

В версии 1.1 пустой prompt запускает прямой img2img без языкового помощника. Если описание фотографии действительно нужно, Describe вызывается отдельно. Масок, inpainting и локальной перекраски здесь нет — цветовое или стилевое указание действует на изображение глобально.

Photo → Image в финальной 1.1: перерисовка композиции и Describe разделены на два явных действия.

Photo → Image в финальной 1.1: перерисовка композиции и Describe разделены на два явных действия.
Загруженный источник, Strength 0,60: пустой prompt запускает прямой img2img без помощника. Это глобальная перерисовка, не маска и не сверхразрешение.

Загруженный источник, Strength 0,60: пустой prompt запускает прямой img2img без помощника. Это глобальная перерисовка, не маска и не сверхразрешение.

Gallery и Library

Gallery сохраняет вместе с PNG промпт, фактический caption, переданный рендереру, seed, размер, пресет и время. Это позволяет повторить рецепт генерации или честно сравнить два результата, если зафиксированы все параметры. Library содержит 176 встроенных карточек; пользовательские записи хранятся отдельно, а Gallery новой установки начинается пустой. Также есть режим Compare где два изображения можно сравнить между собой.

Исторический development-снимок пользовательской Gallery, VERSION 0.1 BUILD 148. Новая установка начинается с пустой Gallery.

Исторический development-снимок пользовательской Gallery, VERSION 0.1 BUILD 148. Новая установка начинается с пустой Gallery.
Gallery details: рядом с PNG сохранены prompt, фактический caption, seed, пресет, размер и время конкретного запуска.

Gallery details: рядом с PNG сохранены prompt, фактический caption, seed, пресет, размер и время конкретного запуска.
Library в версии 1.0 build 1: 176 встроенных карточек по категориям. Снимок предшествует 1.1, но показывает сохранённый состав библиотеки.

Library в версии 1.0 build 1: 176 встроенных карточек по категориям. Снимок предшествует 1.1, но показывает сохранённый состав библиотеки.
Категория Interior во встроенной Library. Карточки поставляются с приложением и не являются пользовательской Gallery.

Категория Interior во встроенной Library. Карточки поставляются с приложением и не являются пользовательской Gallery.
Очередь версии 1.1: десять задач с зафиксированными prompt, seed и настройками; открыто редактирование одной из них. Очередь живёт только в текущем сеансе.

Очередь версии 1.1: десять задач с зафиксированными prompt, seed и настройками; открыто редактирование одной из них. Очередь живёт только в текущем сеансе.

Где заканчивается MIT и начинаются веса

У проекта есть важная лицензионная граница.

Исходный код Cyclonminigen и собственные материалы проекта опубликованы по MIT. Но FP8-checkpoint Ideogram 4 к этой лицензии не относится. Это gated-модель с отдельными Non-Commercial условиями издателя. Открытая лицензия приложения не отменяет ограничений весов.

По принятой политике публичный релиз Cyclonminigen v1.1.19 является source-only: GitHub отдаёт исходные архивы, но не готовое .app или установщик. Веса Ideogram в релиз в любом случае не входят и остаются отдельным gated-компонентом со своими условиями. Для официальной загрузки весов через приложение нужны собственный аккаунт Hugging Face, принятие условий модели и Read token; уже имеющийся совместимый каталог можно подключить read-only без повторной загрузки. Токен хранится в macOS Keychain и используется для авторизованной загрузки.

После того как веса и зависимости находятся на Mac, inference выполняется локально: промпты, исходные фотографии и результаты не отправляются приложением во внешний inference API. Но говорить, что проект «никогда не использует сеть», было бы неверно — модели и SwiftPM-зависимости сначала нужно скачать.

Справка финальной Cyclonminigen 1.1 (build 19): актуальные правила для моделей, генерации, Regions, structured caption и Photo → Image.

Справка финальной Cyclonminigen 1.1 (build 19): актуальные правила для моделей, генерации, Regions, structured caption и Photo → Image.

Что в итоге получилось

Cyclonminigen не сделал Ideogram 4 быстрой. На моём Mac два обычных Turbo-рендера около одного мегапикселя заняли 11 минут 39 секунд и 13 минут 45 секунд, а рендер 2048×2048 в режиме Quality однажды потребовал 384 минуты 55 секунд. Если задача требует максимального холста, разумнее запускать её перед сном, а не перед кофе.

Зато тяжёлый пайплайн стал предсказуемым. Я понимаю, какие компоненты по очереди занимают память, почему маленький VAE способен совпасть с самым большим пиком, сколько стоили три реальные конфигурации пресетов и почему Regions однажды превратили единую сцену в коллаж.

Самым полезным оказался не очередной процент оптимизации. Сначала я учил приложение переводить человеческую фразу на язык модели. Потом модель коллажами объяснила, что переводчик ошибается. Наверное, в этом и состоит большая часть разработки локального ИИ: половину времени учишь машину понимать человека, вторую половину — учишься сам понимать машину.

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

Cyclonminigen — независимый проект и не связан с Ideogram. Репозиторий с исходниками, документацией и точными сведениями об upstream-источниках и атрибуции находится на GitHub.

Автор: abgitdev

Источник