Документация API

URL: https://imgfactory.ru/api/v1

Токен авторизации передается в заголовке Authorization HTTP запроса.

Заблокированный аккаунт получает HTTP 403: {"type":"access error","detail":"Пользователь заблокирован"}. Явно переданный copies должен быть целым числом от 1 до 1000; иначе HTTP 400. Месячного потолка запросов нет.

Эффекты новой формы

Для обоих методов уникализации передайте необязательный query-параметр effects_v1 как URL-encoded JSON-объект. Без него алгоритм и старые параметры не меняются; async по умолчанию создаёт 10 копий каждого файла, sync возвращает один JPEG. Каждый эффект выключен, пока его не включили явно. Формат диапазона: {"enabled":true,"min":0.25,"max":0.4}. Если при включении не передать min/max, применятся безопасные значения новой формы из таблицы. seed - необязательное целое int64 для повторяемых тестов. Неизвестное поле, неверный тип, JSON или диапазон дают HTTP 400 с detail до создания задания.

ГруппаПоля и допустимые значенияЗначения при включении без min/max
Геометрияperspective 0...2 %; frame_shift 0...3 %; edge_fields 0...20 px0.25...0.4; 0.45...0.6; 1...3
Цветhue, temperature -100...100; gamma 0.90...1.10; rgb_shift -10...10; grayscale boolean-3...3; -1.5...1.5; 0.985...1.015; -1...1; false
Светvignette, light_strip 0...100; light_strip.probability 0...1006...11; 6...9, probability 25
Детали и шумnoise 1...100, mode random/uniform/gaussian/impulse/laplace; microblur 0...1; sharpen 0...306...7, random; 0.04...0.07; 4...6
Изменить качествоjpeg_rebuild 70...100 (JPEG)92...94

exif остаётся отдельным старым параметром для async-архива: 0 - не добавлять камерные данные, 1 - схожие данные, 2 - случайные. При 0 служебный APP1/EXIF-блок JPEG может оставаться, как в v3. Sync, как и прежде, не применяет этот параметр и возвращает один JPEG. self_exif_id сейчас не используется. report:true возвращает 400: файл изменений отключён в новой web-форме, архив содержит только результаты обработки. Например: {"status":"error","detail":"effects_v1.gamma: min and max must be within 0.9..1.1, min <= max"}.

Sync:

curl -X POST 'https://imgfactory.ru/api/v1/sync/single/unique' \
  --header 'Authorization: YOUR_API_KEY' \
  --url-query 'effects_v1={"gamma":{"enabled":true},"jpeg_rebuild":{"enabled":true},"seed":42}' \
  --form 'image=@synthetic.jpg' --output unique.jpg

Async и получение статуса:

curl -X POST 'https://imgfactory.ru/api/v1/async/unique?copies=10&exif=2' \
  --header 'Authorization: YOUR_API_KEY' \
  --url-query 'effects_v1={"perspective":{"enabled":true},"hue":{"enabled":true},"noise":{"enabled":true},"seed":42}' \
  --form 'images[]=@synthetic.jpg'
curl 'https://imgfactory.ru/api/v1/tasks?task_id=TASK_ID_FROM_RESPONSE' \
  --header 'Authorization: YOUR_API_KEY'

Уникализовать изображения

До 4056 КиБ на изображение (около 4 МБ). Доступ к API Авито: 9900 лимитов, то есть 990.00 руб. за 30 дней при курсе 10 лимитов за 1 руб..
Асинхронный метод. Создает задачу по уникализации и отправляет ее в очередь. В Response вам вернется id вашей задачи по которому вы сможете получить ссылку на скачивание zip-архива
POST /async/unique
Request body - multipart/form-data
images[]*required
array
Изображения string($binary)
Query параметры
Имя Описание
copies
int
Количество копий каждого изображения
По умолчанию: 10
names
int
Имена файлов
Возможные значения:
  • 0 - хэшированные
  • 1 - по порядку
  • 2 - исходные
По умолчанию: 0
folders
int
Расположение файлов
Возможные значения:
  • 0 - в одну папку
  • 1 - создавая подпапки
  • 2 - в каждой папке набор из всех изображений
По умолчанию: 0
rotate
json
Поворот изображения. Лучше совершать на 1-2 градуса
По умолчанию: { "enable": true, "min": 0, "max": 2 }
crop
json
Обрезка изображения. Не рекомендуется обрезать картинку больше, чем на 5-15 процентов.
Например: { "enable": true, "side": 1, "min": 1, "max": 5 }
Возможные значения side:
  • 0 - С одной случайной стороны
  • 1 - С двух случайных сторон
  • 2 - Со всех сторон
  • 3 - Случайно
По умолчанию: null
saturation
json
Насыщенность. Рекомендуется устанавливать значения больше 50 и меньше 150
По умолчанию: { "enable": true, "min": 90, "max": 110 }
brightness
json
Яркость. Рекомендуется устанавливать значения больше 80 и меньше 130
По умолчанию: { "enable": true, "min": 90, "max": 110 }
contrast
json
Контраст. Не рекомендуется устанавливать значение больше 20
По умолчанию: { "enable": true, "min": 1, "max": 15 }
flip
int
Отражение
Возможные значения:
  • 0 - без отражения
  • 1 - по горизонтали
  • 2 - по вертикали
  • 3 - и по горизонтали и по вертикали
По умолчанию: 0
exif
int
Exif данные
Возможные значения:
  • 0 - удалены
  • 1 - схожие
  • 2 - случайные
По умолчанию: 0
self_exif_id
int
Сейчас не используется: API принимает значения EXIF 0-2.
По умолчанию: 0
Responses
code Content-Type: application/json
200 {"type":"success","task_id":"d4ea7250-a1ea-11ec-9001-8bb6308e00c9"}
400 {"type":"validation error","detail":{"images":["Поле images обязательно для заполнения."]}}
401 {"type":"auth error","detail":"Authorization required"}
401 {"type":"auth error","detail":"Invalid token"}
402 {"type":"payment error","detail":"API не оплачено"}
Пример curl
curl --location --request POST 'https://imgfactory.ru/api/v1/async/unique?copies=1' \
--header 'Authorization: YOUR_API_KEY' \
--form 'images[]=@"/folder/test.jpg"' \
--form 'images[]=@"/folder/another_test.jpg"'

Уникализовать одно изображение

Синхронный метод. В Response вам вернется Content-Type: image/jpeg, byte код уникализированного изображения
POST /sync/single/unique
Request body - multipart/form-data
image*required
string($binary)
Изображение для уникализации
Query параметры
Имя Описание
copies
int
Количество копий каждого изображения
По умолчанию: 10
names
int
Имена файлов
Возможные значения:
  • 0 - хэшированные
  • 1 - по порядку
  • 2 - исходные
По умолчанию: 0
folders
int
Расположение файлов
Возможные значения:
  • 0 - в одну папку
  • 1 - создавая подпапки
  • 2 - в каждой папке набор из всех изображений
По умолчанию: 0
rotate
json
Поворот изображения. Лучше совершать на 1-2 градуса
По умолчанию: { "enable": true, "min": 0, "max": 2 }
crop
json
Обрезка изображения. Не рекомендуется обрезать картинку больше, чем на 5-15 процентов.
Например: { "enable": true, "side": 1, "min": 1, "max": 5 }
Возможные значения side:
  • 0 - С одной случайной стороны
  • 1 - С двух случайных сторон
  • 2 - Со всех сторон
  • 3 - Случайно
По умолчанию: null
saturation
json
Насыщенность. Рекомендуется устанавливать значения больше 50 и меньше 150
По умолчанию: { "enable": true, "min": 90, "max": 110 }
brightness
json
Яркость. Рекомендуется устанавливать значения больше 80 и меньше 130
По умолчанию: { "enable": true, "min": 90, "max": 110 }
contrast
json
Контраст. Не рекомендуется устанавливать значение больше 20
По умолчанию: { "enable": true, "min": 1, "max": 15 }
flip
int
Отражение
Возможные значения:
  • 0 - без отражения
  • 1 - по горизонтали
  • 2 - по вертикали
  • 3 - и по горизонтали и по вертикали
По умолчанию: 0
exif
int
Exif данные
Возможные значения:
  • 0 - удалены
  • 1 - схожие
  • 2 - случайные
По умолчанию: 0
self_exif_id
int
Сейчас не используется: API принимает значения EXIF 0-2.
По умолчанию: 0
Responses
code Content-Type: image/jpeg
200 JPG Byte code
code Content-Type: application/json
400 {"type":"validation error","detail":{"image":["Поле image обязательно для заполнения."]}}
401 {"type":"auth error","detail":"Authorization required"}
401 {"type":"auth error","detail":"Invalid token"}
402 {"type":"payment error","detail":"API не оплачено"}
Пример curl
curl --location --request POST 'https://imgfactory.ru/api/v1/sync/single/unique' \
--header 'Authorization: YOUR_API_KEY' \
--form 'image=@"/folder/test.jpg"'

Получить детали задачи или список задач

GET /tasks
Query параметры
Имя Описание
task_id
string
ID задачи.
Например: 41572e60-a1e5-11ec-84ce-cb7091c1043d
Responses
code Content-Type: application/json
200 {
"type": "success",
"detail": [{
"id": "41572e60-a1e5-11ec-84ce-cb7091c1043d",
"status": "DONE",
"files": "1",
"copies": "50",
"percent": "100",
"result": "https://imgfactory.ru/storage/uploads/api/41572e60-a1e5-11ec-84ce-cb7091c1043d.zip",
"created_at": "2022-03-12 12:17:35",
"updated_at": "2022-03-12 12:18:48"
}]
}

Внимание! Ссылка на скачивание остается доступной в течении 24 часов
200 {
"type": "success",
"detail": [
{
"id": "467668e0-a17d-11ec-b2c3-a73bc049c5f6",
"status": "PENDING",
"files": "2",
"copies": "1",
"percent": null,
"result": null,
"created_at": "2022-03-11 23:53:16",
"updated_at": "2022-03-11 23:53:16"
},
{
"id": "7bab5ad0-a1e0-11ec-80a4-2d8155d1e15d",
"status": "STARTED",
"files": "2",
"copies": "2",
"percent": "20",
"result": null,
"created_at": "2022-03-12 11:43:26",
"updated_at": "2022-03-12 11:43:30"
},
{
"id": "d4ea7250-a1ea-11ec-9001-8bb6308e00c9",
"status": "DONE",
"files": "1",
"copies": "1",
"percent": "100",
"result": "https://imgfactory.ru/storage/uploads/api/d4ea7250-a1ea-11ec-9001-8bb6308e00c9.zip",
"created_at": "2022-03-12 12:57:30",
"updated_at": "2022-03-12 12:57:33"
}
]
}

Внимание! Ссылка на скачивание остается доступной в течении 24 часов
400 {"type":"search error","detail":"Task not found"}
400 {"type":"validation error","detail":{"task_id":["validation.uuid"]}}
401 {"type":"auth error","detail":"Authorization required"}
401 {"type":"auth error","detail":"Invalid token"}
402 {"type":"payment error","detail":"API не оплачено"}
Пример curl
curl --location --request GET 'https://imgfactory.ru/api/v1/tasks?task_id=41572e60-a1e5-11ec-84ce-cb7091c1043d' \
--header 'Authorization: YOUR_API_KEY' \