Skip to content

Image Models (Instant)

Parel BYOM Instant image lane lets you import a public Hugging Face image generation model and call it through /v1/images/generations without provisioning a GPU. Pricing is per image (Parel applies its 1.8x margin on the upstream cost).

ModelHF IDLicenseNotes
FLUX.1 schnellblack-forest-labs/FLUX.1-schnellapache-2.04-step, fastest Flux variant
FLUX.1 devblack-forest-labs/FLUX.1-devnon-commercialLicense acceptance required
FLUX.1 problack-forest-labs/FLUX.1-procommercialClosed-weight
Stable Diffusion 3.5 largestabilityai/stable-diffusion-3.5-largecommunityMulti-component
SDXL base 1.0stabilityai/stable-diffusion-xl-base-1.0openrail++Lightweight
Qwen-ImageQwen/Qwen-Imageapache-2.0Strong on multilingual prompts
PixArt-SigmaPixArt-alpha/PixArt-Sigma-XL-2-1024-MSopenrail++Lightweight, fast

Other Hugging Face models are validated dynamically: if inferenceProviderMapping lists a live text-to-image provider (Fal AI primary), import succeeds.

  1. Validate. Confirm the model is reachable and capture pricing.
  2. Import. Create a tenant-scoped tm_* model ID. If the model carries a non-commercial license (e.g. FLUX.1-dev), pass accepted_license: true.
  3. Generate. Call /v1/images/generations. The endpoint returns 202 Accepted with a task_id because image generation runs through the async queue. Poll /v1/tasks/{id} to read the result URL.
import time
import httpx
API = "https://api.parel.cloud/v1"
HEADERS = {"Authorization": "Bearer pk-dev-YOUR_KEY"}
# 1. Validate
val = httpx.post(
f"{API}/my-models/validate-hf",
headers=HEADERS,
json={"hf_model_id": "black-forest-labs/FLUX.1-schnell"},
).json()
assert val["supported"], val["errors"]
# 2. Import
imported = httpx.post(
f"{API}/my-models/import-hf",
headers=HEADERS,
json={
"validation_id": val["validation_id"],
"execution_mode": "instant",
"accepted_license": val.get("requires_license_acceptance", False),
},
).json()
model_id = imported["parel_model_id"] # tm_flux_1_schnell_xxxx
# 3. Generate (async)
queued = httpx.post(
f"{API}/images/generations",
headers=HEADERS,
json={
"model": model_id,
"prompt": "a serene mountain lake at sunset, photorealistic",
"n": 1,
"size": "1024x1024",
},
).json()
task_id = queued["task_id"]
# 4. Poll
for _ in range(30):
time.sleep(2)
state = httpx.get(f"{API}/tasks/{task_id}", headers=HEADERS).json()
if state["status"] == "completed":
print(state["result"]["data"][0]["url"])
break
if state["status"] == "failed":
raise RuntimeError(state["error"])
EndpointDescription
POST /v1/my-models/validate-hfReturns pipeline tag, pricing, license flag
POST /v1/my-models/import-hfRegisters tm_* model id
POST /v1/images/generationsAsync; returns task_id
GET /v1/tasks/{id}Poll for status=completed and result.data[].url

Pricing is per image. Parel applies a 1.8x margin on the upstream provider rate. Examples (USD):

FamilyUpstreamParel
FLUX.1 schnell$0.003$0.0054
FLUX.1 dev / SD 3.5$0.025$0.045
FLUX.1 pro$0.04$0.072
SDXL / PixArt$0.005$0.009
Qwen-Image$0.018$0.0324

The actual rate is returned in the validate response under pricing.per_image.

Some models (e.g. FLUX.1-dev) ship under a non-commercial license. The validator returns requires_license_acceptance: true and a warning. Pass accepted_license: true in the import body to confirm responsibility for commercial usage. Without acceptance the import returns 400 license_acceptance_required.

Instant image generation is routed via Hugging Face Inference Providers (Fal AI by default). End-to-end latency depends on the provider:

  • FLUX.1 schnell: 4-7 seconds warm
  • FLUX.1 dev: 9-14 seconds warm
  • SD 3.5 large: 6-9 seconds
  • Qwen-Image: 5-8 seconds

There is no dedicated GPU and no idle charge. For deterministic latency or LoRA support, see Dedicated GPU (image dedicated path lands in BYOM Image Faz 2).

  • Video models (Wan2.2, HunyuanVideo)
  • Image edit / inpaint endpoints
  • LoRA upload
  • ControlNet conditioning

These ship in BYOM Image Faz 2 (PAR-44).