Qwen Image 3.0 Pro бесплатно (2026): лимиты и 429

Qwen Image 3.0 Pro стоит $0 на ofox, без оплаты за изображение. Но это временно и с квотой: два запроса подряд дают 429. Подключение за 3 минуты.

Qwen Image 3.0 Pro бесплатно (2026): лимиты и 429

Alibaba выпустила Qwen Image 3.0 Pro 21 июля 2026 года, и на ofox она появилась по цене $0. Не «$0 за токены со спрятанной снизу оплатой за изображение» — именно так устроено большинство моделей изображений на этом шлюзе. Здесь нет и поштучной оплаты. Это настоящий ноль, а не пробный кредит, который тихо утекает.

При этом это не тот вид бесплатности, на котором стоит строить продукт на этой неделе. Причина написана в карточке модели по-китайски, и англоязычные обзоры её в основном пропустили: 本版本为限时免费体验版,目前为限量体验阶段 — временная бесплатная пробная версия, сейчас фаза ограниченной квоты. Это два отдельных ограничения, и прервёт ваш день именно второе.

Ниже — что даёт этот бесплатный доступ, что он отнимает, и три детали интеграции, которые сломают код, списанный из руководства по gpt-image-2. Все изображения в статье — сырой вывод модели, сгенерированный 23 июля 2026 года.

Что можно и чего нельзя после подключения

МожноГенерировать изображения за $0 (и по токенам, и поштучно) через OpenAI-совместимый эндпоинт, text-to-image, произвольные размеры
Сколько времениОколо 3 минут, если ключ ofox уже есть
Что нужноКлюч ofox API, Python 3.8+ или Node 18+ и SDK openai, который у вас скорее всего уже стоит
НельзяГонять пакетную обработку. Планировать под опубликованную квоту. Рассчитывать, что цена сохранится в следующем месяце. Получить base64. Использовать референсные изображения (см. ниже)

Когда использовать, а когда нет

Стоит использовать, если:

  • Вы выбираете модель изображений и хотите проверить рендеринг текста на своих промптах, прежде чем вкладывать бюджет куда бы то ни было.
  • Вы генерируете эпизодически и интерактивно, несколько картинок в час, где 429 стоит вам одной повторной попытки, а не проваленной задачи.
  • Вам нужен корректный кириллический или китайский текст внутри изображения, а текущая модель его коверкает. Именно здесь Qwen действительно отличается, и проверка ничего не стоит.

Не стоит, если:

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

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

Что потребуется

  • Ключ ofox API из консоли ofox.
  • Python 3.8 или новее с openai>=1.0, либо Node 18+ с пакетом openai. Аккаунт Alibaba, ключ DashScope и настройка региона не нужны.
  • Место, куда писать файлы. Эндпоинт отдаёт ссылку, а не байты, и живёт эта ссылка недолго.

Подключение за три минуты

Шаг 1: направить SDK на ofox

from openai import OpenAI

client = OpenAI(
    base_url="https://api.ofox.ai/v1",
    api_key="YOUR_OFOX_KEY",
)

Ожидаемый результат: никакого вывода. Если импорт падает, обновите пакет: pip install -U openai.

Шаг 2: вызвать модель

resp = client.images.generate(
    model="bailian/qwen-image-3.0-pro:free",
    prompt="A ceramic mug on a linen cloth, morning light, shallow depth of field",
    size="1024x1024",
    n=1,
)
print(resp.data[0].url)

Ожидаемый результат: в стандартный вывод печатается ссылка вида https://dashscope-*.oss-accelerate.aliyuncs.com/....

Вариант для Node:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.ofox.ai/v1",
  apiKey: process.env.OFOX_API_KEY,
});

const r = await client.images.generate({
  model: "bailian/qwen-image-3.0-pro:free",
  prompt: "A ceramic mug on a linen cloth, morning light",
  size: "1024x1024",
  n: 1,
});
console.log(r.data[0].url);

Шаг 3: скачать байты до истечения ссылки

import urllib.request

urllib.request.urlretrieve(resp.data[0].url, "out.png")

Ожидаемый результат: файл out.png на диске, обычно 1–1,5 МБ при 1024x1024.

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

Три детали, которые ломают списанный код

1. Возвращается ссылка, а не base64

Большинство ходящих по сети руководств написаны под gpt-image-2, который возвращает b64_json. Qwen 3.0 Pro на этом эндпоинте возвращает url, а b64_json оставляет пустым. Такой код падает:

raw = base64.b64decode(resp.data[0].b64_json)   # TypeError на Qwen

Если вы маршрутизируете запросы между моделями, обрабатывайте обе формы:

item = resp.data[0]
raw = (base64.b64decode(item.b64_json) if item.b64_json
       else urllib.request.urlopen(item.url).read())

Ссылка указывает на OSS Alibaba и содержит подпись со сроком действия. Сохраняйте байты. Ссылка, записанная в базу данных, позже превратится в битую картинку.

2. Бесплатная квота действует «на момент», а не «на сутки»

Числа RPM не опубликованы, поэтому мы измерили то, что можно наблюдать. Запросы подряд дают 429 Requests rate limit exceeded уже на втором. Два параллельных процесса генерации получают 429 оба, и ни один не двигается, пока один не убьёшь. Один последовательный воркер с нарастающим откатом от 45 секунд довёл до конца каждый запрос.

Схема вызововРезультат
Два запроса подрядВторой сразу 429
Два процесса параллельно, один ключОба 429, ни один не проходит, пока один не убить
Один воркер, откат 45 с, пауза 20 с между задачамиВсе запросы прошли
Та же схема, четыре задачи подрядВсе четыре прошли, после первой очистки 429 не было

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

import time, openai

def generate(prompt, size="1024x1024", tries=6):
    for i in range(tries):
        try:
            r = client.images.generate(
                model="bailian/qwen-image-3.0-pro:free",
                prompt=prompt, size=size, n=1)
            return r.data[0].url
        except openai.RateLimitError:
            time.sleep(45 * (i + 1))
    raise RuntimeError("квота так и не освободилась")

# Через OpenAI SDK 429 приходит как openai.RateLimitError.
# HTTPError(429) из urllib вы поймаете только при прямом обращении к HTTP.

3. Никакого перечня допустимых размеров

Многие эндпоинты изображений принимают фиксированный список размеров и отвергают всё остальное — поэтому в коде генерации так часто встречается таблица соответствия «широкий формат → строка, которую благословил конкретный вендор». Здесь, судя по всему, устроено иначе.

Переданный размерВозвращеноПрименение
1024x1024как запрошеноквадрат по умолчанию
1024x1536как запрошеновертикаль, постеры и карточки характеристик
1664x928как запрошеноширокий, близко к 16:9

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

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

Референсные изображения: заставить работать не удалось

В карточке модели референсные изображения указаны рядом с text-to-image. Через этот эндпоинт заставить их работать не получилось, и способ отказа стоит зафиксировать, потому что он молчаливый.

Мы взяли постер с кофемашиной из теста 1 как исходник и попросили перерисовать его в стиле чернильного наброска, сохранив вёрстку и значения характеристик. Три варианта:

ПопыткаРезультат
images.generate(..., image="data:image/png;base64,...")HTTP 200, изображение вернулось, референс полностью проигнорирован
images.generate(..., image_url="data:image/png;base64,...")HTTP 200, изображение вернулось, но референс не воспроизведён
POST /images/editsHTTP 400 You must provide a model parameter, при том что model в теле есть

Первая попытка нагляднее всего: на входе фотореалистичный постер с кофемашиной, на выходе — реклама ботанической сыворотки. Стиль верный, предмет совершенно не тот. От референса не осталось ничего.

Вторая на первый взгляд ближе, но при разборе показательнее. В исходном постере бойлер 1,6 л и вес 12,4 кг; здесь — 2,0 л и 28 кг. Таблица из четырёх строк превратилась в сетку из восьми ячеек, предметная съёмка — в разрез с выносками, строка про гарантию исчезла. Единственное совпавшее значение, 9 бар, — стандартное давление любой эспрессо-машины, так что доказательством оно не служит.

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

Точная формулировка: поддержка референсных изображений у этой модели задокументирована, а мы не нашли формы параметра, которая доносит их через OpenAI-совместимый эндпоинт изображений ofox. Возможно, это работает через нативный API DashScope, возможно, правильное имя параметра мы просто не попробовали. Достоверно другое: отказ происходит беззвучно. Если строите на этом, проверяйте, что результат отражает вход, а не считайте 200 успехом.

Держится ли заявление про рендеринг текста

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

Тест 1: мелкий шрифт в таблице характеристик. Промпт требовал четыре подписанные строки с точными значениями и строку мелким шрифтом с серийным номером внизу.

Постер вымышленной эспрессо-машины с заголовком ATLAS ONE, таблицей характеристик Pressure 9 bar, Boiler 1.6 L, Weight 12.4 kg, Warranty 24 months и мелкой строкой Serial AT-2026-0731 / Made in Suzhou внизу

Все значения на месте: Pressure 9 bar, Boiler 1.6 L, Weight 12.4 kg, Warranty 24 months. Нижняя строка читается как Serial AT-2026-0731 / Made in Suzhou — верно вплоть до косой черты и серийника с дефисом. При 1024x1536 этот мелкий шрифт соответствует примерно 8pt. Ни выпавших глифов, ни выдуманных символов, ни расплывшихся букв на малых кеглях, а именно там модели изображений обычно себя и выдают.

Тест 2: две системы письма в одном кадре. Английский и китайский на одной вывеске, каждый своей строкой, с общим числовым полем.

Тёмно-синяя навигационная вывеска конференции: DEVELOPER TRACK HALL B по-английски, ниже 开发者专场 B 馆 по-китайски, затем Registration 09:00 и 注册签到 09:00, справа стрелка вправо

Обе системы письма корректны. 开发者专场 и 注册签到 — правильно построенные иероглифы, а не шум в форме иероглифов, который выдаёт большинство моделей. Латиница и китайский держат одинаковую насыщенность, и 09:00 совпадает в обеих строках.

Тем, кто пытался получить пригодный постер с иероглифами из западной модели, значение этого кадра объяснять не нужно. Это самый интересный результат в статье, и воспроизвести его бесплатно можно самому.

Тест 3: техническая схема со множеством подписей. Обычно здесь всё рассыпается. Промпт называл пять строк, которые обязаны присутствовать (CLIENT, GATEWAY, MODEL, RESPONSE и легенда auth / route / inference), а подписи под блоками оставлял на усмотрение модели.

Плоская векторная инфографика Three-Step API Request Flow: подписанные блоки CLIENT, GATEWAY и MODEL соединены нумерованными стрелками, снизу возвращается дуга RESPONSE, в левом нижнем углу легенда auth, route, inference

Все пять заданных строк отрисованы правильно и в нужных местах. Примечательно то, что модель добавила сама: заголовок, нумерацию стрелок 1. Request / 2. Forward / 3. Output и собственные подписи, технически связные, а не похожие на рыбу («Validates authentication / Routes to endpoint» под шлюзом). Орфография выдержана по всей схеме.

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

Тест 4: где ломается по-настоящему. Мы попросили скриншот редактора кода с деревом файлов, подсвеченным Python и видимыми номерами строк с 1 по 14.

Макет редактора кода в тёмной теме: дерево файлов с main.py, utils.py и config.yaml, в центре подсвеченный Python, в строке состояния UTF-8 CRLF Python 3.12 Ln 8 Col 22 Spaces 4

Оболочка почти безупречна. Имена файлов верны и снабжены подходящими иконками, строка состояния читается как UTF-8 CRLF Python 3.12 Ln 8, Col 22 Spaces: 4 ровно как задано, строка меню осмысленна, подсветка синтаксиса раздаёт правдоподобные цвета ключевым словам, строкам и именам функций.

Теперь посмотрите на колонку номеров: 1, 3, 3, 4, 6, 7, 9, 8, 0, 8, 11, 11, 12, 13, 14. Нет 2, нет 5, нет 10, несколько повторов и затесавшийся 0. Затем последняя строка кода: if __name__ = "__main__": — один знак равенства там, где Python требует два.

Это честная граница модели. Слова — включая мелкие и китайские — выходят верно. Последовательности нет. Колонка номеров строк — самая чистая проверка монотонного счёта, и модель выдала нечто, что издали похоже на счёт, а вблизи рассыпается. Знак = вместо == — то же слабое место с другой стороны.

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

Частые ошибки при подключении

ОшибкаЧто означаетЧто делать
429 Requests rate limit exceededКвота бесплатного доступа, не сбойВыстроить запросы последовательно, откат от 45 с и выше. Не параллелить
TypeError: expected str, got None на b64_jsonВы списали код от gpt-image-2Читать data[0].url и скачивать
Ссылка на изображение отдаёт 403 позжеПодписанная ссылка OSS истеклаСкачивать сразу при генерации, хранить байты
model_not_foundПропущен суффикс :freeПолный ID — bailian/qwen-image-3.0-pro:free, вместе с двоеточием
Пустой массив dataПромпт попал под контент-фильтрПереформулировать. Эндпоинт не всегда возвращает явную причину отказа

Настройка для команды

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

Три способа, по возрастанию трудозатрат:

  1. Один ключ, одна очередь. Поставьте генерацию за очередь задач с одним воркером вместо того, чтобы каждый ноутбук бил в эндпоинт напрямую. Это то изменение, которое действительно решает проблему.
  2. Разделять по модели, а не по ключу. Qwen — единственная бесплатная модель изображений на ofox, так что на практике это означает перенести массовую работу на платную модель, оставив Qwen для типографики, где он реально выигрывает. Seedream 5.0 Lite по $0.035 за изображение — самое дешёвое место для массовой нагрузки.
  3. Автоматический запасной вариант. Ловить 429 и повторять на платной модели с реальной пропускной способностью. При $0.035–$0.05 за изображение несколько разблокированных картинок стоят дешевле, чем ожидающий инженер.

Поскольку всё живёт за одним base URL и одним ключом, третий пункт — это смена строки с моделью, а не вторая интеграция.

CHAIN = [
    "bailian/qwen-image-3.0-pro:free",      # $0, но с квотой
    "volcengine/doubao-seedream-5.0-lite",  # $0.035 за изображение
    "openai/gpt-image-2",                   # $4/M вход, $24/M выход
]

def generate_with_failover(prompt, size="1024x1024"):
    for model in CHAIN:
        try:
            r = client.images.generate(
                model=model, prompt=prompt, size=size, n=1)
            return model, r.data[0]
        except Exception as e:
            if "429" not in str(e):
                raise
    raise RuntimeError("все провайдеры придушены")

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

Подготовка к дню, когда бесплатное окно закроется

«Временно» без даты окончания — это проблема планирования, замаскированная под примечание о цене. Отказ выглядит не как приход счёта, а так: однажды утром model ID перестаёт резолвиться или начинает резолвиться в платный вариант, и то, куда вы его встроили, перестаёт работать, а в команде никто уже не помнит почему.

Три дешёвые меры, каждая занимает не больше самой интеграции:

  • Держите model ID в конфиге. Одна строка в переменной окружения, а не разбросанная по шести местам вызова. Для большинства команд это и есть вся защита.
  • Логируйте, какая модель выдала каждое изображение. Если качество поплывёт, сначала нужно понять, не подменилась ли модель под ногами, и только потом винить свои промпты.
  • Знайте цену запасного варианта заранее. Таблица ниже для того и существует, чтобы решение было принято до того, как 429 станут постоянными.

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

Чем заменить, когда Qwen придушит

МодельЦена на ofoxПримечание
bailian/qwen-image-3.0-pro:free$0, и поштучно тожеЕдинственная по-настоящему бесплатная. С квотой и со сроком
volcengine/doubao-seedream-5.0-lite$0.035 за изображениеСамый дешёвый реальный вариант. Тарифицируется поштучно, не по токенам
volcengine/doubao-seedream-4.5$0.04 за изображениеПредыдущее поколение того же семейства
volcengine/doubao-seedream-5.0-pro$0.05 за изображениеСтарший Seedream. Естественный первый переход
google/gemini-3.1-flash-lite-image$0.25/M вход, $1.50/M выходПо токенам. Предсказуемая пропускная способность
google/gemini-3.1-flash-image$0.50/M вход, $3.00/M выходПо токенам, старше уровнем
openai/gpt-image-2$4/M вход, $24/M выход (кэш $1/M)Самый предсказуемый

Эту таблицу стоит читать внимательно, потому что страницы с ценами легко понять неверно — мы сами так и сделали с первого захода. Модели изображений тарифицируются по-разному. У строк Seedream обе колонки токенов показывают $0/M, что выглядит как бесплатно и таковым не является: они берут плату за каждое сгенерированное изображение, и до вашего счёта доходит строка Per Image. Строка $0/$0 у модели изображений не говорит ни о чём.

Из этого следует, что Qwen Image 3.0 Pro — единственная модель изображений на ofox, которая сейчас не стоит вообще ничего, ни по токенам, ни поштучно. И это рушит удобную версию истории: бесплатного запасного варианта нет. Когда квота вас придушит, альтернатива будет стоить денег — $0.035–$0.05 за изображение по нижней границе. Немного, но не ноль, а конвейеру, спроектированному вокруг «бесплатно», нужно знать, к какому из двух он относится.

Seedream остаётся самым естественным первым переходом: тот же base URL, тот же ключ, замена одной строки. Но это другое семейство, и те же четыре типографских теста мы на нём не гоняли, так что считать его прямой заменой рендерингу текста Qwen — это допущение, а не вывод.

Цены проверены запросами к страницам моделей ofox 23 июля 2026 года. По ходу проверки наткнулись на деталь: для gpt-image-2 API /v1/models вернул нашему ключу $5/M и $30/M — это перечёркнутая колонка прайс-листа, которую страница модели показывает рядом со скидочными $4/M и $24/M от ofox. Мы проверяли это только на одном ключе, поэтому воспринимайте как повод читать страницу, а не API, а не как задокументированное правило.

Про платные уровни подробнее — в разборе ошибок генерации GPT-Image-2, а про китайские модели в целом — в обзоре Qwen, DeepSeek и MiniMax для России.

Что проверить не удалось

Проговариваю пробелы, потому что многие обзоры этого релиза их не проговаривают:

  • Нет бенчмарков. Alibaba выпустила это поколение без технического отчёта и без опубликованных оценок. Любой рейтинг Qwen Image 3.0 Pro — чьё-то субъективное впечатление, включая наше.
  • Нет открытых весов. У предыдущих поколений Qwen-Image веса скачивались, у этого нет, так что self-hosting не является обходным путём вокруг квоты.
  • Нет опубликованных лимитов. Числа выше — наблюдения с одного ключа за один день, а не задокументированные ограничения. У вас может быть иначе, и Alibaba вправе изменить их никого не предупредив.
  • Нет даты окончания бесплатной цены. «Временно» без даты — это всё раскрытие целиком.
  • Заявление про длинные промпты не проверено. Alibaba рекламирует обработку промптов в тысячи токенов. Наши тестовые промпты были по несколько десятков слов, что ничего не говорит о связности описания сцены на 4000 токенов. Из-за квоты полноценный нагрузочный тест за один заход нереален, и делать вид, что мы его провели, мы не будем.
  • Размер выборки — четыре. Четыре промпта, по одной попытке, без повторов и без отбора. Этого достаточно, чтобы показать, что мелкий текст работает, а числовые последовательности ломаются, но недостаточно, чтобы поставить процент рядом с любым из этих утверждений.

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

Источники, проверенные для этой статьи