Spaces:
Running
A newer version of the Gradio SDK is available:
5.44.1
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
, ortop
)data[3]
: Mask image (object as above, ornull
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
andproduct_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
, ortop
fordata[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.