Постер в FLUX 3 Image: расположение элементов и правка надписи

Готовим макет постера, переводим его в bounding boxes FLUX 3, собираем запрос к API и проверяем текст, композицию и правку одной области перед публикацией.

Обложка в шалфейно-зелёных тонах: кисть, нарисованная одной линией на кремовой бумаге, круглый орнамент и заголовок FLUX 3 Image.

Чтобы сделать рекламный постер в FLUX 3 Image, выделите товару, заголовку и строке предложения отдельные рамки — bounding boxes, добавьте их описания в промпт и генерируйте изображение с тем соотношением сторон, под которое подготовлен макет. Затем проверьте надписи и композицию, прежде чем публиковать результат. Рамки дают модели ориентир для размещения элементов, но не превращают её в инструмент точной вёрстки.

В этом руководстве мы подготовим оригинальный постер с керамической кружкой в формате 4:5: полный макет, скачиваемый клиент на Python, запрос на изменение одной строки и критерии приёмки. Такой подход пригодится, если общий промпт даёт привлекательные изображения, но заголовок постоянно перекрывает товар, а призыв к действию получается слишком мелким.

Что проверено 7 октября 2026 года: мы сверили официальную документацию API, сделали снимок её реального интерфейса и локально проверили сборку запросов и обработку ошибок. Платную генерацию FLUX для этой статьи мы не запускали. Бриф постера составлен автором; ни одно изображение ниже не выдаётся за созданный нами постер или доказательство качества генерации.

1. Подготовьте бриф до открытия генератора

Скачайте комплект для руководства. В него входят flux_poster.py, два сопутствующих упражнения с API и файл зависимостей. Понадобится Python 3.10 или новее и пустая рабочая папка. Распакуйте архив и перейдите в папку со скриптами:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

В Windows PowerShell используйте для активации .venv\Scripts\Activate.ps1. Для генерации нужен ключ BFL API: подписка ChatGPT его не заменяет, а ключ другого провайдера нельзя считать совместимым по умолчанию. Получите доступ через официальную панель BFL и перед отправкой запросов проверьте актуальные тарифы BFL. Подготовка выполняется локально; генерация и последующая правка могут оплачиваться отдельно.

В нашем вымышленном брифе намеренно нет реального бренда, цены или обещания скидки:

РешениеЗначение в упражненииЗачем определить заранее
ХолстВертикальный, 4:5При смене формата изменятся пропорции макета
ТоварОдна терракотовая кружка, ручка справаМожно проверить конкретный объект и его ориентацию
ЗаголовокA QUIETER MORNINGКороткой надписи можно выделить достаточно места
Строка предложенияAutumn collectionОписывает вымышленную коллекцию без придуманной акции
Призыв к действиюExplore the rangeДействие отделено от предложения
ОформлениеТёплая кремовая бумага, тёмный шрифтЗадаёт единое требование к контрасту

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

2. Переведите макет в координаты

FLUX использует порядок [top, left, bottom, right]: целые числа от 0 до 1000, отсчитываемые от левого верхнего угла. Его легко перепутать с прямоугольниками, у которых первой идёт координата x, как во многих графических библиотеках. Координаты нормализуются независимо по каждой оси. Поэтому одна и та же рамка на холстах разных пропорций будет иметь разную ширину и высоту в пикселях. Документация BFL по bounding boxes.

Реальная документация BFL: порядок координат bounding box FLUX 3 и поля для генерации и редактирования.

Снимок официальной документации на английском языке от 7 октября 2026 года. Он показывает формат полей, а не завершённую генерацию. Источник.

Для примера используйте такой макет:

ID элементаРамкаПредназначенная область
background_1[0, 0, 1000, 1000]Весь холст
headline_1[80, 80, 230, 920]Широкий заголовок в верхней части
product_1[290, 220, 720, 780]Товар по центру с запасом места для ручки
offer_1[770, 100, 845, 900]Предложение под товаром
cta_1[885, 240, 950, 760]Отдельный призыв к действию внизу

На условном рабочем холсте 1000 × 1250 пикселей рамка товара даст левую границу 220, верхнюю 362,5, правую 780 и нижнюю 900 пикселей. Это пример пересчёта, а не обещание, что параметр API 1k вернёт именно такие размеры. После скачивания проверьте фактические размеры изображения.

Чтобы перевести пиксельный прямоугольник в координаты FLUX, разделите вертикальные координаты на высоту изображения, а горизонтальные — на ширину, затем умножьте на 1000 и округлите. Убедитесь, что top меньше bottom, left меньше right и все четыре значения лежат в допустимом диапазоне. Скрипт из комплекта отклоняет рамки без положительной площади и повторяющиеся ID элементов ещё до сборки запроса.

Оставьте свободное пространство между текстом и товаром. Зазор в координатах не гарантирует визуального разделения: верхние выносные элементы букв, тени и ручка кружки могут выходить за намеченную область. Лучше выделить мелкому тексту больше места, чем многократно усиливать требование в промпте.

3. Соберите промпт и проверьте запрос локально

Макет передаётся текстом внутри prompt; отдельного свойства запроса bounding_boxes в этом процессе нет. Скрипт соединяет описание со ссылками на элементы, например <headline_1>, с массивом JSON. Полный исходный макет выглядит так:

caption = (
    "A vertical promotional poster on a warm cream paper background <background_1>. "
    "A single terracotta ceramic mug <product_1> is centered below the large headline <headline_1>. "
    "One short offer line <offer_1> and a small call to action <cta_1> sit below the mug. "
    "Clean studio lighting, calm editorial design, no brand logo, no additional text."
)
rows = [
    {"id": "background_1", "bbox": [0, 0, 1000, 1000],
     "desc": "Flat warm cream paper with subtle grain."},
    {"id": "headline_1", "bbox": [80, 80, 230, 920],
     "desc": 'Large dark serif text reading exactly "A QUIETER MORNING".'},
    {"id": "product_1", "bbox": [290, 220, 720, 780],
     "desc": "One terracotta ceramic mug, three-quarter view, handle on the right, no lettering."},
    {"id": "offer_1", "bbox": [770, 100, 845, 900],
     "desc": 'Dark readable text reading exactly "Autumn collection".'},
    {"id": "cta_1", "bbox": [885, 240, 950, 760],
     "desc": 'Small dark text reading exactly "Explore the range".'},
]

Запустите подготовку без ключа:

python flux_poster.py --out prepared-poster

Ожидаемый результат — файл prepared-poster/request.json и сообщение о том, что запрос к API не отправлялся. Откройте файл и проверьте aspect_ratio: "4:5", resolution: "1k", grounding: false, все пять ID и точное написание трёх надписей. Корректный JSON подтверждает возможность сериализовать запрос, но не способность модели безошибочно нарисовать эти слова.

Мы отключаем grounding, поскольку вымышленный бриф уже содержит нужные сведения. Это решение для данного упражнения, а не рекомендация отключать его в любой задаче. В обзоре FLUX 3 API описаны эндпоинт генерации и его параметры. Первый запуск лучше оставить простым: не добавляйте одновременно референсы, новое разрешение и переработанный макет.

4. Запустите генерацию, сохраните задание и скачайте результат

Задайте BFL_API_KEY в локальном окружении. Не помещайте ключ в скрипт, скриншот или репозиторий. Затем выберите новую папку:

python flux_poster.py --run --out live-poster

Клиент отправляет запрос на https://api.bfl.ai/v1/flux-3-image, сохраняет полученное задание в job.json и опрашивает URL, возвращённый сервисом. При успешном статусе Ready он скачивает изображение и сохраняет настоящий PNG в poster.png. Скрипт также выводит фактические размеры в пикселях. В комплект включён полный сетевой код: обработка тайм-аутов и ошибок не скрыта за многоточием.

На опрос состояния отведено пять минут; уже выполняющийся сетевой запрос может закончиться позже этого срока. Локальный тайм-аут не доказывает, что удалённое задание завершилось неудачей. Если сохранился job.json, продолжите обработку того же задания:

python flux_poster.py --resume --out live-poster

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

5. Измените предложение, сохранив макет

В упражнении заменим «Autumn collection» на «Weekend collection». Для правки скачанное изображение передаётся как ref_image_0. У строки предложения задаются from: null и src_bbox: null, а целевая рамка остаётся прежней. Все остальные элементы сохраняют ссылку на источник и совпадающие исходную и целевую рамки.

Перед отправкой проверьте запрос на редактирование:

python flux_poster.py --edit live-poster/poster.png --out prepared-edit

Если подготовленный запрос соответствует задаче, запустите генерацию в другой новой папке:

python flux_poster.py --edit live-poster/poster.png --run --out live-edit

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

Строки сохраняемых элементов описывают то, что должно остаться стабильным. Они не доказывают, что каждый другой пиксель останется прежним. Сравните источник и результат при одинаковом масштабе. Проверьте не только изменённую строку, но и ручку кружки, заголовок, тени и поля. Если товар изменился, отклоните правку или наложите согласованный текст в обычном редакторе. Более удачная надпись не оправдывает неверное изображение товара.

6. Проверьте готовность постера к использованию

Держите рядом с исходным брифом короткую таблицу приёмки:

ПроверкаУсловие приёмкиЧто делать при ошибке
ТекстВсе буквы, пробелы и регистр совпадают с согласованной версиейУвеличить область текста, согласовать более короткую формулировку или сверстать надпись отдельно
ТоварОдна кружка в нужной ориентации, без лишней ручки и выдуманного брендаУпростить сцену; если важна точная идентичность, использовать разрешённый референс
ИерархияЗаголовок читается первым, товар не перекрыт, призыв к действию виденСкорректировать рамки вместо добавления конкурирующих стилевых указаний
РедактированиеНужная строка изменилась, важные соседние элементы остались приемлемымиСравнить версии; сохранить утверждённый оригинал как источник
ФайлВерное соотношение сторон, достаточные фактические размеры, корректный файл изображенияПроверить скачанный файл, не полагаясь на расширение имени
ПубликацияНет необоснованной акции, случайного логотипа или нечитаемого мелкого текстаИсправить материал до распространения

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

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

Частые ошибки и следующий полезный шаг

HTTP 401 указывает на проблему аутентификации: проверьте, загружен ли ключ BFL в ту же оболочку, из которой запущен Python. При HTTP 400 просмотрите сохранённый запрос: нет ли неподдерживаемых значений или некорректных данных. Не подставляйте названия параметров другого провайдера. При HTTP 429 проверьте лимиты аккаунта и отложите повторную отправку, вместо того чтобы запускать непрерывный цикл повторов.

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

После приёмки постера следующей задачей может стать подготовка фотографии товара или видео. Для исходного изображения используйте отдельное руководство по замене фона фотографии товара на английском, а для планирования движения — раскадровку короткого видео по фотографии товара на английском. Это разные результаты работы: удачное размещение элементов на постере само по себе не подтверждает качество видео или локализованной кампании.

Часто задаваемые вопросы

Обрезает ли bounding box FLUX 3 всё, что находится за его пределами?
Нет. Рамка задаёт ориентиры для положения и масштаба, но не служит жёсткой маской обрезки. После редактирования проверяйте и целевую область, и остальное изображение.
Можно ли подготовить постер без ключа API?
Да. По умолчанию скрипт из комплекта создаёт request.json, не отправляя запрос. Для генерации нужны собственный аккаунт BFL с доступом к API, ключ и оплата по действующим условиям.