sm4ll-VTON-Demo / API_Calls_Docs /curl_api_docs.md
risunobushi
add custom headers for identifying the demo env
2023b16

A newer version of the Gradio SDK is available: 5.44.1

Upgrade

SM4LL-VTON Demo API – cURL Usage Guide

This document describes how to interact with the SM4LL-VTON Gradio app via HTTP API using cURL commands. The app exposes a /gradio_api/call/generate endpoint for programmatic access to the virtual try-on functionality.


Base URL

This is the current deployed endpoint:

https://sm4ll-vton-sm4ll-vton-demo.hf.space/gradio_api/call/generate

Main Endpoint: /gradio_api/call/generate

Description

Submit a request to generate a virtual try-on result using a base image (person), a product image (garment), and a workflow type. Optionally, a mask image can be provided.

HTTP Method

POST

Endpoint

https://sm4ll-vton-sm4ll-vton-demo.hf.space/gradio_api/call/generate

It should be changed to the correct domain once a Gradio instance is working on YourMirror.io

Request Format

  • Content-Type: application/json
  • Required fields in the data array:
    • data[0]: Base image (object: { "path": "<url or file path>", "meta": {"_type": "gradio.FileData"} })
    • data[1]: Product image (object: { "path": "<url or file path>", "meta": {"_type": "gradio.FileData"} })
    • data[2]: Workflow type (string: eyewear, footwear, dress, or top)
    • data[3]: Mask image (object as above, or null if not used)

Example cURL Request

curl -X POST "https://sm4ll-vton-sm4ll-vton-demo.hf.space/gradio_api/call/generate" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {"path": "base_image_url.jpg", "meta": {"_type": "gradio.FileData"}},
      {"path": "product_image_url.jpg", "meta": {"_type": "gradio.FileData"}},
      "eyewear",
      null
    ]
  }'
  • Replace base_image_url.jpg and product_image_url.jpg with the URLs or file paths to your images. (For local files, you must first upload them to a public URL or use Gradio's temp storage)
  • For other workflow types, use footwear, dress, or top for data[2].
  • For the optional mask image, use the same object format as above, or set to null.

Accepted Workflow Types

Currently, the accepted workflow types and their corresponding models are:

  • eyewear: sunglassesVTON
  • footwear: footwearVTON
  • dress: fullbodyVTON
  • top: topgarmentVTON

Future available types and models will be:

  • bottom: bottomgarmentVTON
  • lookbook: lookbookVTON

Response

  • On success: Returns a JSON object with a data field containing a base64-encoded PNG image of the result.
  • On error: Returns a JSON object with an error field describing the issue (e.g., rate limit, NSFW content, missing images).

Example Success Response

{
  "data": [
    "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
  ],
  "is_generating": false, ...
}

Example Error Response

{
  "error": "Product image contains inappropriate content. Please use a different image."
}

Requesting a processed result

To request a process result, you need to retrieve the event_id from the initial cURL request's responde. For a XYZ event_id, you then need to construct a new cURL request:

curl -N "https://sm4ll-vton-sm4ll-vton-demo.hf.space/gradio_api/call/generate/XYZ"

The responde will be in the following form:

event: heartbeat
data: null

event: heartbeat
data: null

[...]

event: complete
data: [{"path": "path/to/tmp/gradio/storage", "url": "url/of/resulting/image", "size": null, "orig_name": "image.webp", "mime_type": null, "is_stream": false, "meta": {"_type": "gradio.FileData"}}]

You can then download the resulting image by using a new cURL command or any other way to download images from URLs, referencing the url/of/resulting/image obtained in the previous step via cURL -N. For example:

curl -o result.png "url/of/resulting/image"

With Optional Mask Image

curl -X POST "https://sm4ll-vton-sm4ll-vton-demo.hf.space/gradio_api/call/generate" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {"path": "base_image_url.jpg", "meta": {"_type": "gradio.FileData"}},
      {"path": "product_image_url.jpg", "meta": {"_type": "gradio.FileData"}},
      "dress",
      {"path": "mask_image_url.png", "meta": {"_type": "gradio.FileData"}}
    ]
  }'

Notes

  • Rate Limiting: Max 30 requests per IP per hour. Exceeding this will return an error.
  • NSFW Filter: Product images are checked for explicit content and may be rejected.
  • Supported Formats: JPG, JPEG, PNG, WEBP (GIF/AVIF not supported).
  • Authentication: No authentication is required for public Hugging Face Spaces. If deployed privately, include the necessary headers/tokens.
  • Image Upload: Images must be accessible via a public URL or sent to Gradio's temporary storage.