Recraft: Recraft V4.1 Flash
Recraft V4.1 Flash генерирует растровые изображения 1K по тексту для быстрых визуальных итераций. Поддерживает фотографию, портреты, сложные сцены и концепции логотипов с выходом PNG или WebP без потерь и явными цветовыми предпочтениями.
О модели
Описание раскрывает возможности модели. Доступные в Ailoot входные данные, результаты и параметры выбранного метода перечислены ниже.
Recraft V4.1 Flash — модель Recraft для генерации изображений по тексту, быстрой итерации и больших объёмов визуальной работы. Разработчик называет сильными задачами фотографию, портреты, атмосферу, сложные сцены, смешанные техники и концепции логотипов. Текстовое задание становится растровым изображением для сравнения с другими творческими направлениями перед разработкой итогового материала. Flash — отдельный участник семейства V4.1 с собственным размером результата и поддерживаемыми настройками.
Штатный результат — растровое изображение класса 1K Recraft. Выбирайте холст под размещение: горизонтальная иллюстрация для заголовка страницы, вертикальный портрет или квадратный визуал компактной карточки. Форматы — WebP без потерь и PNG.
Начните задание с главного объекта и визуальной цели, затем опишите кадрирование, обстановку, свет и технику. Полезная инструкция для товарной концепции: «Компактное радио кремового цвета на столе из ореха, передний ракурс три четверти, мягкий оконный свет, спокойная редакционная фотография, много свободного места слева». Для иллюстрации обозначьте язык форм, палитру и отношения элементов. Явно задавайте определяющие идею детали вместо несвязанных прилагательных. Документированный предел Flash — до 10 000 символов, позволяющий подробно описать сцену при необходимости.
Настройки разработчика включают предпочтительные цвета и желаемый цвет фона. Seed доступен для воспроизводимости, интерфейс документирует от одного до шести изображений в запросе. Это поддерживает полезное сравнение: сохраняйте объект и композицию, меняйте одно визуальное направление и оценивайте пригодность изображений для целевого макета. Цветовые предпочтения описывают запрос; сравнивайте важные брендовые цвета с готовым материалом до объединения с существующей дизайн-системой.
Flash создаёт растровую графику. Концепция логотипа помогает выбрать силуэт, настроение или расположение, тогда как редактируемые контуры принадлежат отдельным моделям Vector. У Flash также нет версии Pro. Полная линейка V4.1 предоставляет эти отдельные варианты, когда важны векторное редактирование или детали повышенного разрешения. Разработчик описывает последующее уточнение выбранного эскиза до более детального изображения; этот этап — отдельная операция, а не другой штатный размер результата Flash.
Эта версия не поддерживает вход image-to-image, пользовательские стили, идентификаторы стилей, соответствие стилю или стилевые референсы. Интерфейс также исключает негативные промпты и явное управление текстовым макетом. Опишите внешний вид и композицию в позитивном задании. Если в концепции есть надпись, заключите нужные слова в кавычки и проверьте буквы; используйте отдельную вёрстку, когда необходимы точные типографика и размещение.
Практический результат Flash — выбранное визуальное направление с ясным заданием, подходящими пропорциями и пригодным растровым файлом. Сравнивайте объект, кадрирование, фон и важные детали в целевом размере. Сохраняйте удачный промпт и файл вместе, чтобы следующий шаг продолжал выбранное направление. Быстрая итерация помогает исследовать дизайн; штатный векторный вывод, соответствие стилевым референсам и разрешение другой версии V4.1 остаются отдельными выборами модели.
Ailoot Ultra · Картинки POST /v1/images/generations recraft/recraft-v4.1-flash
recraft/recraft-v4.1-flashНачало
Recraft V4.1 Flash генерирует растровые изображения 1K по тексту для быстрых визуальных итераций. Поддерживает фотографию, портреты, сложные сцены и концепции логотипов с выходом PNG или WebP без потерь и явными цветовыми предпочтениями.
- Допустимые входные данные
- Текст
- Результаты
- Картинки
Доступно в Ailoot · входные данные и методы
Ailoot Ultra · Картинки POST /v1/images/generations
- Входные данные
text- Результат
image- Выходной формат
- Файл изображения
- Число результатов
- 1 выход
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения recraft/recraft-v4.1-flash | По умолчанию— |
Полеprompt | Типstring | ТребованиеОбязательно | Значения и ограничения Минимальная длина: 1 Условия: Непустой текстовый запрос UTF8. Общий для производителя лимит символов не выдумывается. | По умолчанию— |
Полеn | Типinteger | ТребованиеНеобязательно | Значения и ограничения 1 | По умолчанию1 |
Полеresponse_format | Типstring | ТребованиеНеобязательно | Значения и ограничения url, b64_json | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения false | По умолчаниюfalse |
Сочетания входных материалов
Из текста в изображение · Обязательно: prompt
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрcontent_type | Контрактapplication/json |
Параметрrequired | Контрактmodel, prompt |
Параметрmaterial_types | Контрактtext |
Параметрoptional | Контрактn, response_format, stream |
Параметрn | Контракт1 |
Параметрstream | Контрактfalse |
Параметрresponse_format | Контрактurl, b64_json |
Параметрreference_images | Контрактfalse |
Параметрedit | Контрактfalse |
Параметрoutput_format_optional | Контракт |
Параметрresolution_control | Контрактnull |
Параметрaspect_ratio_control | Контрактnull |
Параметрother_fields | Контрактотклоняется, кроме точной закреплённой внутренней маршрутизации поставщика |
Жизненный цикл: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · Фактически возвращённый task_id или запись в медиатеке
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Создайте одно изображение по текстовому запросу.
Сохраните каждый элемент data; url/b64_json обозначают способы представления результата.
Тарифы
Как рассчитывается итоговая плата
Отображаемые тарифы позволяют оценить стоимость до генерации. Итоговое списание рассчитывается по стоимости, записанной для исходной генерации. Измеренная длительность результата и прогнозные объёмы не являются итоговым оплачиваемым объёмом.
Тарифная справка не добавляет режимы запроса. Поддерживаемые параметры указаны для выбранного метода.
- Быстрый режим
- Не указано При выборе быстрого режима
- Режим flex
- Не указано При выборе режима flex
- Максимальная интенсивность рассуждений
- Не указано При максимальной интенсивности рассуждений с корректировкой по умолчанию (default)
Оценочные ставки для сравнения
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Прогноз количества | Расчётная единица | Плата |
|---|---|---|---|---|
| КонфигурацияБазовые тарифы на токены | Шкала ставокБазовая ставка | Прогноз количества— | Расчётная единица— | Плата Вход · Входные токены · Оценка только для сравнения — / 1K токенов Выход · Выходные токены · Оценка только для сравнения — / 1K токенов Вход · Чтение кэша · Оценка только для сравнения — / 1K токенов Вход · Запись в кэш · Оценка только для сравнения — / 1K токенов Вход · Запись в кэш, 1 час · Оценка только для сравнения — / 1K токенов |
| КонфигурацияUltra | Шкала ставок— | Прогноз количества— | Расчётная единицаза выходное изображение | Плата Выход · вывод изображения · Оценка только для сравнения $0.014 за выходное изображение |
| КонфигурацияОриентировочная стоимость генерации | Шкала ставок— | Прогноз количестваОценка для одной генерации | Расчётная единица— | Плата Выход · Оценочная стоимость генерации · Оценка только для сравнения $0.014 оценка до генерации Эта оценка не является дополнительным списанием или фиксированным тарифом для завершённой генерации. |
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Сведения о справочном тарифе
Справочные шкалы модели не меняют выбор метода, расчёт стоимости или списания. Действующая плата определяется ставками выбранного метода Ailoot.
Тарифные конфигурации изображений
Цены по конфигурациям
| Конфигурация | Условия расчёта | Плата |
|---|---|---|
| КонфигурацияВыходное изображение | Условия расчётаВариант тарификации не заявлен. | Плата Выход · Выходное изображение $0.014 за изображение Эквивалентные записи описывают одно начисление; они не добавляют вторую плату. |
Примеры запросов
Ailoot Ultra · Картинки
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "recraft/recraft-v4.1-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
request={'model': 'recraft/recraft-v4.1-flash', 'prompt': 'A lighthouse on a cliff, watercolor', 'n': 1, 'response_format': 'b64_json'}
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "recraft/recraft-v4.1-flash", "prompt": "A lighthouse on a cliff, watercolor", "n": 1, "response_format": "b64_json"};
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
if(!encoded && uri.startsWith("data:image/")) {
const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
encoded=uri.slice(comma+1);
}
if(encoded) {
if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
raw=Buffer.from(encoded,"base64");
} else if(uri) {
const u=new URL(uri,"https://api.ailoot.ai");
if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
if(!response.ok) throw new Error("Image content download failed: "+response.status);
raw=Buffer.from(await response.arrayBuffer());
} else throw new Error("Image has neither bytes nor URL");
if(!raw.length) throw new Error("Empty image result");
const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
Получить и сохранить результаты
Ailoot Ultra · Картинки
Загрузите каждое полученное изображение или сохраните его содержимое Base64
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Сохраняйте все готовые результаты
Сохраните каждое готовое изображение; загрузите содержимое по каждому полученному URL или декодируйте его содержимое Base64.
Сохраняйте каждый элемент данных. Декодируйте каждый b64_json или загружайте ресурс по каждому возвращённому подписанному URL. Выбирайте расширение имени файла по фактическому MIME и байтам.
Если нужно проверить исходный ответ
Если результат генерации или редактирования изображения требует проверки, сохраните исходный operation_id/X-Client-Request-ID и возвращённые сведения о результате. Восстановите существующие собственные результаты через медиатеку, используя фактические значения task_id или asset_id. Не отправляйте запрос генерации или редактирования повторно и не составляйте URL опроса из operation_id.
Поля ответа
| Поле | Тип |
|---|---|
Полеcreated | Типinteger |
Полеdata[].url | Типstring |
Полеdata[].b64_json | Типbase64 string |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Ответserver_error | УсловиеВозвращённый ответ указывает, что операция или результат требуют проверки | Следующий шагСохраните исходный возвращённый ID операции или задачи, заголовки запроса и ответ; продолжайте поддерживаемые операции чтения исходной операции. Не отправляйте запрос создания повторно. |
Псевдонимы
Псевдонимы моделей
Ailoot Ultra recraft/recraft-v4.1-flash
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
FAQ · Recraft: Recraft V4.1 Flash
- Какие входные данные и результаты доступны?
POST /v1/images/generations·recraft/recraft-v4.1-flash:text→image- Какие поля использует запрос?
POST /v1/images/generations·recraft/recraft-v4.1-flash:model,prompt,n,response_format,stream