Перейти к основному контенту

Своя LoRA на хостинге: URL вместо очереди загрузки

Запустите обученную LoRA на хостинге Qwen Image API по URL: без загрузки, со скриптом, ценами за изображение и ссылками, что падают сразу или позже.

Автор
SpicyAPI Engineering
Опубликовано
Время чтения
13 мин чтения
Обновлено
Акварельная теплица зимой снаружи в сумерках, тёплый свет за запотевшим стеклом, снег на переплётах и велосипед, прислонённый к двери

Опубликованный пример Qwen Image 2.1 LoRA: вес стиля, загруженный через поле loras.

У вас есть обученная LoRA в формате .safetensors в бакете или в репозитории Hugging Face, и вы хотите использовать её без регистрации, загрузки и ожидания одобрения. В Qwen Image 2.1 LoRA это поле запроса: URL и число силы, которые загружаются при выполнении задачи. Модель работает без цензуры, и веса, на которые вы указываете, не проверяются.

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

Главное

  • LoRA — это поле запроса, а не объект для регистрации. loras принимает до трёх записей {path, scale}; ничего не загружается, не сканируется и не одобряется.
  • Оба эндпоинта её принимают: текст в изображение и редактирование по референсу, поэтому веса можно применить и к кадрам, которые у вас уже есть.
  • Некоторые битые ссылки падают сразу, другие — только после принятия задачи. Веб-страница вместо файла даёт 400; мёртвый хостинг или ссылка, которая истечёт позже, принимаются и падают затем, а удержание возвращается.
  • Загрузка — не то же самое, что работа. Сравните с запуском без весов, с тем же промптом и тем же seed.
  • Количество LoRA не меняет цену; при редактировании цену меняет количество референсных изображений.

Сначала попробуйте в Playground

  1. Откройте страницу текст в изображение и оставайтесь во вкладке Playground в режиме Form. Чтобы запустить, войдите в аккаунт с положительным балансом.
  2. Напишите промпт, описывающий сцену, а не стиль; пусть внешний вид несут веса.
  3. В разделе Style LoRAs вставьте прямую ссылку на файл в LoRA file и задайте Strength (1 — обычное начальное значение). Add item даёт до трёх весов.
  4. Выберите 1k для недорогого первого взгляда, затем запустите модель.
  5. Чтобы понять, сделали ли веса хоть что-нибудь, задайте Seed, выполните один запуск, нажмите Remove item и выполните снова с тем же промптом и тем же seed.

Тело запроса в Playground — тот же JSON, который принимает API, поэтому работающую здесь настройку можно перенести в код один в один. Если здесь не работает, исправьте ссылку или веса до того, как напишете хоть строчку кода.

Затем запустите из кода

Установите Python SDK (pip install spicyapi), задайте SPICY_API_KEY в окружении сервера и выполните:

python
import uuid
from spicyapi import SpicyClient, output_assets

client = SpicyClient()  # reads SPICY_API_KEY from the environment

task = client.create_task(
    model="alibaba/qwen-image-2.1-lora/text-to-image",
    input_data={
        "prompt": "A fishing harbour at first light, rowing boats at their moorings, "
                  "the far quay dissolving into mist over the water.",
        "loras": [{
            "path": "https://huggingface.co/your-account/your-style-lora/resolve/<commit-sha>/style.safetensors",
            "scale": 1,
        }],
        "aspect_ratio": "3:2",
        "resolution": "1k",
        "output_format": "webp",
    },
    idempotency_key=str(uuid.uuid4()),
)

final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
    raise RuntimeError(f"{task['taskId']} ended as {final['state']}: {final.get('errorCode')}")
print(output_assets(final)[0]["url"])  # copy the image to your own storage now

Создание, ожидание, скачивание, повторы и коды ошибок описаны в руководстве по задачам и справочнике Python SDK. Результаты истекают, поэтому прочитайте хранение и доставку, прежде чем строить что-то на возвращённой ссылке.

Или пусть запустит агент

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

  • CLI. Положите тот же объект input в input.json, затем:

``bash spicyapi tasks create --model alibaba/qwen-image-2.1-lora/text-to-image --input-file input.json --wait ``

Смотрите документацию CLI; npx @spicyapi/cli работает без установки.

  • MCP-сервер. Добавьте MCP-сервер к своему ассистенту, затем попросите: «Запусти Qwen Image 2.1 LoRA с этим промптом и этой ссылкой на веса при силе 1». Он вызывает spicyapi_task_create, который останавливается для подтверждения цены, затем spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill устанавливает Agent Skill, благодаря которому кодовый ассистент читает актуальную схему модели, а не угадывает поля.

Массив loras

loras принимает до трёх записей { "path", "scale" } на обоих эндпоинтах: текст в изображение и редактирование по референсу (от 1 до 10 изображений).

СвойствоЗначениеПочему это важно
Записей в запросеДо 3Четвёртая отклоняется сразу: loras: must contain at most 3 items
pathПрямая HTTPS-ссылка на файл .safetensorsЗагружается в момент генерации, при каждой задаче, оттуда, где вы его разместили
scaleОт 0 до 4, по умолчанию 1Сила относительно базовой модели; 1 — обычная начальная сила. Выше 4 отклоняется
  • Используйте ссылку на файл, а не страницу репозитория. URL репозитория Hugging Face или страница blob/main/... отклоняются. Используйте ссылку resolve/... на сам файл.
  • Реестра нет. Вы никогда не получаете идентификатор веса и списка «мои LoRA» не существует. Seed стабилизирует серию, но не воспроизводит кадр, поэтому сохраняйте список {path, scale}, промпт, настройки и ID задачи рядом с каждым результатом.

Выбирайте веса, документированные как совместимые с конкретной задачей. Опубликованные примеры Qwen Image 2.1 включают адаптеры генерации 2512 и адаптеры редактирования Edit 2511/2509, поэтому более старая версия в имени файла сама по себе не делает файл несовместимым. Более старые задачи доступны также через Qwen Image 2512 LoRA, а наше руководство по Qwen Image 2.1 LoRA разбирает, какие старые файлы переносятся.

Какие битые ссылки падают при отправке

Когда вы отправляете веса, API пробует ссылку. Если хостинг отвечает, а вернулось не файл, вы получаете 400 до того, как существует задача, и до того, как удержаны деньги:

Ваш pathРезультат
Прямая ссылка на файл у отвечающего хостинга (ссылка resolve/... Hugging Face, ваш бакет)Принято
Файл, который отдаёт 404400: The LoRA link in loras does not lead to a file on <host>. Use the direct download link to the .safetensors file, not the model's web page
Веб-страница вместо файла (страница репозитория, страница blob/, любой HTML)Тот же 400
Приватный или несуществующий путь Hugging Face400: needs a sign-in on huggingface.co, so the model cannot download it
Хостинг, который не резолвится, текст, который не URL, или простое имя user/repoПринимается котировкой; может упасть после принятия
Ссылка, которая работает сейчас и перестаёт работать позжеПринято; падает после принятия

Референсные изображения на эндпоинте редактирования обрабатываются так же: отсутствующий файл image_urls — это 400 с названием хостинга.

Две принятые строки — именно от них нужно защищаться. Ссылка, которая умирает позже (истёкшая подписанная ссылка, ставший приватным репозиторий, переименованный или удалённый файл), роняет любой запрос, который на неё ссылается, потому что веса загружаются при каждой задаче. По нашему тесту октября 2026 года задача, у которой хостинг весов не резолвится, была принята и быстро упала (примерно 3 секунды) с invalid_request; удержание вернули (cost был 0, settled был true), а сообщение говорило, что LoRA не удалось загрузить по указанной ссылке. invalid_request возвращается и при неверных входных данных, поэтому сам по себе код не указывает на ссылку, а при нескольких весах сообщение не называет конкретную запись. Настройте диагностику заранее: после принятой котировки сбой invalid_request означает, что сначала нужно проверить URL весов.

Локализуйте проблему, опустошив массив

Когда принятая задача падает, отправьте тот же запрос один раз с пустым loras и больше ничего не меняя. Успех указывает на адаптер, его загрузку или его взаимодействие с запросом; проверьте ссылку, формат файла, совместимость и стек по одному. Второй сбой делает следующими проверками код ошибки задачи, исходные изображения и состояние сервиса.

Держите один контрольный вес

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

Проверяйте при развёртывании, а не на каждый запрос

Выполняйте бесплатную котировку (spicyapi tasks quote --model alibaba/qwen-image-2.1-lora/text-to-image --input-file input.json) для каждого URL весов, на который ссылается ваша конфигурация, в вашем пайплайне развёртывания и при старте сервиса. Это ловит явно нерабочие ссылки, но не совместимость адаптера. Не берите котировку перед каждой генерацией: это добавляет задержку, а ссылка всё равно может умереть через минуту.

Закрепите адрес, чтобы он не мог сдвинуться

  • Hugging Face: resolve/main/... следует за веткой. Закрепите коммит: resolve/<commit-sha>/<file>.safetensors.
  • Собственное хранилище: вставьте хеш содержимого в ключ, например character-v7-4f9c81.safetensors, и никогда не перезаписывайте ключ.
  • Истекающие подписанные URL: избегайте их в долгоживущих конфигурациях. Для повторяющихся задач используйте стабильный адрес или выпускайте свежую ссылку прямо перед каждой отправкой, которая переживёт задачу и все повторы.
  • Сторонние репозитории: авторы могут в любой момент переименовать, закрыть или удалить репозиторий. Если файл критичен, скопируйте его в хранилище, которым владеете вы, с учётом его лицензии, и закрепите свою копию.

LoRA что-то сделала?

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

Опубликованный пример стиля Qwen Image 2.1 LoRA. Он показывает, что стилевой вес может сделать с кадром.

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

  1. Выберите промпт, провал которого очевиден: объект, который базовая модель рендерит фотографично, со стилем, который вес должен навязать.
  2. Описывайте сцену, а не стиль. Попросите «loose impressionist brushwork», и один только промпт это создаст, так что вы запишете вес как рабочий. Пусть внешний вид несёт файл.
  3. Выполните тот же промпт и тот же seed без весов и сравните. Если результат неразличим, сравнение не показало видимого эффекта адаптера.
  4. Меняйте по одному значению: scale 1, затем 2, затем 3. Вес, который заметно усиливается, был просто слабым; тот, который остаётся инертным на каждом шаге, вероятно, сделан для другой базы. Также проверьте рекомендованную автором базовую модель и активирующие слова.
  5. Записывайте вердикт рядом с URL и держите подходящие и неподходящие веса в отдельных списках.

Веса загружаются до генерации, поэтому первый вызов с новым файлом медленнее на десятки секунд, а для больших файлов — ещё больше (примерно на 25 секунд для файла 1.2 GB). Заложите 90–120 секунд на холодный вызов.

Три слота

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

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

Сколько это стоит

Цены указаны за изображение:

Эндпоинт1k1.5k2k
Текст в изображение$0.03$0.054$0.102
Редактирование, 1 референс$0.042$0.078$0.15
  • Количество LoRA не меняет цену. Одна запись и три котируются одинаково.
  • Загрузка весов стоит надбавку к базовой модели. Qwen Image 2.1 без массива стоит $0.024 при 1k и $0.048 при 2k, поэтому задаче, которой веса не нужны, следует вызывать базовое семейство.
  • При редактировании каждое дополнительное референсное изображение добавляет фиксированную сумму: $0.012 при 1k и $0.024 при 2k.
Запрос на редактирование1k2k
1 референс$0.042$0.15
2 референса$0.054$0.174
5 референсов$0.09$0.246
10 референсов$0.15$0.366

Коротко: дороже всего обходится запрос со многими референсными изображениями в 2k, а не запрос с тремя LoRA.

Сто кадров «текст в изображение» стоят $3.00 при 1k и $10.20 при 2k; сто редактирований с десятью референсами в 2k стоят $36.60. Итерируйте в 1k и переводите удачные результаты в 2k.

Редактирование с весами

Примените вес персонажа к кадру, который вы уже утвердили, с весом домашнего стиля под ним и меньшей силой:

json
{
  "model": "alibaba/qwen-image-2.1-lora/edit",
  "input": {
    "prompt": "The source image is the character. Keep her face, her hair and the cut of the coat exactly as they are. Restage her on a wet city street at night, lit by shop windows from the left.",
    "image_urls": ["https://cdn.example.com/approved/frame-0412.png"],
    "loras": [
      { "path": "https://cdn.example.com/weights/character-v7-4f9c81.safetensors", "scale": 1 },
      { "path": "https://cdn.example.com/weights/house-grade-v2-0ab3de.safetensors", "scale": 0.45 }
    ],
    "aspect_ratio": "4:5",
    "resolution": "2k"
  }
}

Отправьте его тем же кодом, используя alibaba/qwen-image-2.1-lora/edit как модель. Копируйте значения полей из актуальной схемы на странице модели; руководство по генерации изображений объясняет, чем различаются эндпоинты изображений.

Веса без цензуры и из ограниченных категорий

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

Следующие шаги

По базовой модели смотрите наш тест Qwen Image 2.1; по редактированию без поля маски — наш тест Qwen Image Edit. Более широкий каталог моделей изображений перечисляет актуальную схему и оценку для каждой модели.

Вопросы и ответы

Могу ли я запустить свою LoRA на API, не загружая её?

Да. loras принимает до трёх записей {path, scale}, где path — прямая ссылка на файл .safetensors. Эндпоинта загрузки, очереди одобрения и белого списка не существует.

Принимает ли он ссылки Hugging Face?

Да, в виде https://huggingface.co/<user>/<repo>/resolve/<commit-sha>/<file>.safetensors. Страницы репозитория, страницы blob/ и приватные или отсутствующие пути отклоняются.

Почему мой запрос с LoRA упал без полезной ошибки?

Чаще всего path перестал работать после принятия задачи. Мёртвый хостинг, истёкшая подписанная ссылка или ставший приватным репозиторий падают с invalid_request, а этот код возвращается и при неверном вводе, поэтому сам по себе он не называет ссылку. Удержание возвращают. Локализуйте проблему с пустым loras или сначала проверьте URL весов.

Моя LoRA почти не меняет изображение. Что не так?

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

Сколько LoRA я могу сложить и не дорожает ли это?

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

Можно ли использовать LoRA при редактировании существующего изображения?

Да. Эндпоинт редактирования принимает тот же массив loras с одним–десятью референсными изображениями. Отправьте утверждённый кадр как референс, скажите в промпте, что должно измениться, и позвольте весам нести идентичность.

Что делает scale и какое значение ставить?

Он взвешивает LoRA относительно базовой модели от 0 до 4, при этом 1 — обычная начальная сила. Ниже 1 вид остаётся сдержаннее, выше 1 вес доминирует.

Как воспроизвести изображение, сделанное с определённым стеком?

Сохраните стек. Реестра нет, и seed не воспроизводит кадр, поэтому держите список {path, scale}, промпт и настройки рядом с результатом, а каждый путь закрепите на адресе, который не может сдвинуться.

Другие языки English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Italiano · Polski