Как удалить объект с изображения через FLUX Inpainting? Для этого подготовьте маску, где лишний предмет закрашен белым, отправьте изображение и маску на эндпоинт flux-pro-1.0-fill, дождитесь статуса Ready и скачайте результат. Модель для этой задачи — FLUX.1 Fill от Black Forest Labs.
Чем правка области отличается от расширения кадра
FLUX.1 Fill — специализированная модель для инпейнтинга, и в документации BFL она описана через две взаимодополняющие задачи. Первая: выделить конкретные области внутри изображения и отредактировать их, сохраняя окружающий контекст — менять объекты, улучшать детали, естественно убирать лишние элементы. Вторая: добавлять новые пиксели по краям изображения, расширяя кадр за исходные границы, чтобы повысить разрешение или сменить соотношение сторон.
Разница для читателя практическая. Инпейнтинг работает внутри холста: вы указываете область, и модель перерисовывает её, опираясь на соседние пиксели. Аутпейнтинг работает снаружи: холст увеличивается, и модель достраивает то, чего в кадре не было. Удаление объекта — это инпейнтинг. Вы не расширяете сцену, вы заменяете фрагмент содержимым, которое должно там находиться.
Официальный репозиторий проекта на GitHub описывает FLUX.1 Fill как модель с продвинутыми возможностями инпейнтинга и аутпейнтинга, где правки бесшовно интегрируются в существующее изображение. В примерах документации BFL показана замена куртки на другую по стилю и замена текста на неоновой вывеске — оба случая относятся к правке области.
Путаница возникает, когда читатель берёт инструмент для расширения кадра и пытается им убрать предмет. Технически запрос уйдёт, но маска будет описывать не ту задачу. Для удаления объекта нужен режим правки области, и дальше речь только о нём.
Правило маски: чёрное сохраняется, белое перерисовывается
Ключевое правило документации BFL звучит так: при использовании маски чёрные области сохраняются, а белые перерисовываются. Это единственное, что нужно запомнить перед подготовкой файла.
Практический вывод: объект, который вы убираете, закрашивается белым. Всё, что должно остаться нетронутым, остаётся чёрным. Если перепутать полярность, модель перерисует фон и оставит предмет — результат будет противоположным задуманному.
Документация GitHub-репозитория проекта уточняет требование к файлу: входная маска должна быть изображением того же размера, что и исходное изображение, и содержать только чёрные и белые пиксели. Полутона, размытые края и серые переходы в этом файле не предусмотрены.
Отсюда два следствия для подготовки. Первое: маску удобно рисовать в графическом редакторе поверх копии исходника, чтобы границы совпадали попиксельно. Второе: размеры холста маски и изображения должны совпадать, иначе область правки сместится.
В примере документации BFL показано, как исходный заголовок «KILL BILL» превращается в «FLUX PILL» с помощью чёрно-белой маски. Тот же принцип работает для удаления: белым закрывается то, что должно исчезнуть.
Два способа задать область правки
Документация BFL перечисляет два подхода к указанию области редактирования.
Отдельная маска. Вы передаёте два файла: изображение и отдельную чёрно-белую маску. Чёрные области сохраняют оригинал, белые перерисовываются.
Альфа-канал. Вы передаёте один PNG или WebP с прозрачностью. Прозрачные области перерисовываются, непрозрачные сохраняются. Отдельный файл маски не нужен.
| Критерий | Отдельная маска | Альфа-канал PNG/WebP |
|---|---|---|
| Файлов в запросе | Изображение и маска | Один файл |
| Что задаёт область | Белые пиксели | Прозрачные пиксели |
| Что сохраняется | Чёрные пиксели | Непрозрачные пиксели |
| Формат | Чёрно-белое изображение | PNG или WebP |
| Когда удобнее | Правка готового JPEG | Работа со слоями и прозрачностью |
Выбор зависит от исходника. Если изображение пришло в JPEG и вы готовите маску отдельно, берите первый способ. Если вы работаете в редакторе со слоями и можете экспортировать прозрачность, второй способ экономит один файл.
Оба способа описаны в одном разделе документации BFL, и оба ведут к одному эндпоинту. Смысл области задаётся одинаково: помеченное место перерисовывается, остальное остаётся.
Минимальный запрос к API
Документация BFL приводит запрос к эндпоинту https://api.bfl.ai/v1/flux-pro-1.0-fill. Ключ передаётся в заголовке x-key, тело — JSON. Вот минимальный набор полей по документации:
curl -X POST "https://api.bfl.ai/v1/flux-pro-1.0-fill" \
-H "x-key: $BFL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "<your prompt>",
"image": "<base64 encoded image>",
"mask": "<base64 encoded mask>",
"steps": 50,
"guidance": 30,
"output_format": "jpeg",
"safety_tolerance": 2
}'
Что делает каждое поле. prompt — текстовое описание того, что должно появиться в области правки. image — исходное изображение в base64. mask — маска в base64. steps — число шагов генерации. guidance — сила следования промпту. output_format — формат результата. safety_tolerance — допуск фильтра безопасности.
В примере на Python из документации BFL изображение и маска кодируются через base64.b64encode, ключ берётся из переменной окружения BFL_API_KEY через os.environ.get. Секрет не попадает в код и не выводится в терминал.
Для удаления объекта поле prompt описывает не сам предмет, а то, чем заполняется освободившееся место. Об этом — следующий раздел.
Polling: id, статусы и срок жизни ссылки
Запрос не возвращает готовую картинку сразу. Документация BFL описывает порядок: после отправки вы получаете объект с полями id и polling_url. Дальше нужно опрашивать polling_url, пока задача не завершится.
Статусы в примере документации: Ready означает готовность, Error и Failed — сбой генерации. Цикл опроса в примере BFL делает паузу и повторяет запрос, пока не увидит один из этих статусов.
Успешный ответ — JSON-объект с полем result, а result['sample'] содержит подписанную ссылку на файл. Документация BFL отдельно предупреждает: подписанные ссылки действительны 10 минут, результат нужно забрать в этот срок.
Практический порядок действий:
- Отправьте POST-запрос с изображением и маской.
- Сохраните
idиpolling_urlиз ответа. - Опрашивайте
polling_urlс заголовкомx-key, пока статус не станетReady,ErrorилиFailed. - При
Readyскачайте файл поresult['sample']в течение 10 минут. - При
ErrorилиFailedпроверьте тело ответа и повторите запрос.
Ссылку стоит скачивать сразу в постоянное хранилище. Полагаться на то, что она откроется позже, нельзя.
Промпт для удаления: что убрать и чем заполнить
Промпт в задаче удаления описывает не предмет, а поверхность под ним. Формулируйте по трём слотам: что убрать, чем заполнить место, что сохранить без изменений.
Промпт, чтобы убрать объект с фотографии и восстановить фон:
Удали [объект] из области, отмеченной маской. Заполни это место [описание фона: текстура, цвет, поверхность]. Сохрани без изменений всё остальное: освещение, тени, линии перспективы, фон вокруг области правки.
Что менять под себя: [объект] — предмет, который убираете; [описание фона] — то, что должно оказаться на его месте. Чем конкретнее описан фон, тем меньше поводов у модели дорисовать лишнее.
Вариации той же задачи:
Убери [объект] с маски. Восстанови [поверхность] так, чтобы текстура совпадала с соседними участками. Остальное оставь как есть.
Удали [объект] и заполни область фоном [цвет и материал]. Сохрани направление света и тени от соседних предметов.
Убери [объект] с маски. Продолжи [линия: горизонт, край стола, стена] через область правки. Остальную часть кадра не меняй.
Удали [объект]. Заполни место [материал] с той же зернистостью, что у соседних участков. Сохрани отражения и блики вокруг.
Убери [объект] с маски. Восстанови [фон] без новых предметов. Сохрани исходный кадр за пределами области.
Маска задаёт область перерисовки. В промпте уточните нужную поверхность в белой зоне и характеристики соседнего фона, с которым она должна сочетаться.
Чек-лист проверки результата
Готовый файл нужно осмотреть до передачи заказчику. Используйте следующую карту приёмки: сравните область правки с соседним фоном и исходным изображением. Последний столбец содержит возможное следующее действие; результат повторной генерации проверяют заново.
| Зона проверки | На что смотреть | Типичный дефект | Что менять |
|---|---|---|---|
| Граница маски | Стык правки с исходником | Видимая кромка, резкий переход | Расширить маску, добавить запас по краю |
| Повторяющиеся текстуры | Плитка, трава, ткань | Разрыв рисунка, дубль фрагмента | Уточнить описание фона в промпте |
| Линии перспективы | Горизонт, края стола, стены | Излом линии на границе | Продолжить линию в промпте |
| Тени | Тень от удалённого объекта | Лишняя тень или её пропажа | Описать направление света |
| Отражения | Зеркала, лужи, стекло | Отражение удалённого предмета | Указать отражения в промпте |
| Анатомия | Руки, лица, фигуры | Лишний палец, искажённая кисть | Сузить маску до предмета |
| Случайные объекты | Вся область правки | Появился новый предмет | Убрать из промпта лишние слова |
Откройте файл в полном разрешении и отдельно осмотрите границу маски. Если виден стык, попробуйте захватить маской прилегающий участок и сравните новый результат с предыдущим. Если содержимое внутри области не подходит, уточните описание фона в промпте.
Частые вопросы
Чем FLUX Inpainting отличается от обычной генерации изображения?
Обычная генерация создаёт картинку с нуля по текстовому описанию. FLUX.1 Fill работает с уже существующим изображением: вы задаёте область, и модель перерисовывает её с опорой на окружающие пиксели. Документация BFL описывает это как правку частей изображения с сохранением окружающего контекста.
Что делать, если маска перепутана и модель перерисовала фон?
Проверьте полярность: чёрные области сохраняются, белые перерисовываются. Если фон оказался в белой зоне, инвертируйте маску и отправьте запрос заново. Размеры маски и изображения должны совпадать.
Можно ли задать область без отдельного файла маски?
Да. Документация BFL описывает второй способ: PNG или WebP с прозрачностью. Прозрачные области перерисовываются, непрозрачные сохраняются. Отдельный файл маски в этом случае не нужен.
Сколько живёт ссылка на готовый результат?
Подписанная ссылка в поле result['sample'] действительна 10 минут. Документация BFL просит забрать результат в этот срок. Скачивайте файл сразу в постоянное хранилище.
Что писать в промпте, если нужно просто убрать предмет?
Опишите фон, который должен оказаться на месте предмета: текстуру, цвет, поверхность. Добавьте просьбу сохранить освещение, тени и линии перспективы. Чем конкретнее описан фон, тем меньше риск, что модель дорисует лишнее.
