Pruna AI P Image Text To Image LoRA API Documentation

Pruna AI P Image Text To Image LoRA API Documentation

Playground

Try it on WaveSpeedAI!

Pruna AI P-Image Text to Image LORA is a fast AI image generation model that creates high-quality images from text prompts with LORA-based customization. Ready-to-use REST inference API for stylized image generation, brand-specific visuals, character design, product concepts, marketing creatives, and custom AI image workflows with simple integration, no coldstarts, and affordable pricing.

Features

Pruna AI P-Image Text-to-Image LoRA generates images from natural-language prompts while allowing you to apply a custom LoRA for style or subject control. It is designed for workflows where you want the flexibility of text-to-image generation together with a Pruna-trained LoRA for more specialized visual outputs.


Why Choose This?

  • LoRA-powered image generation Generate images from prompts while steering the result with a custom LoRA.

  • Custom style and subject control Use lora_weights to apply a specialized visual style, character concept, or trained aesthetic.

  • Flexible sizing options Choose a preset aspect_ratio or switch to custom for direct width and height control.

  • LoRA strength adjustment Use lora_scale to control how strongly the LoRA influences the final image.

  • Seed support for reproducibility Reuse the same seed to generate more consistent variations.

  • Affordable fixed pricing Each generation run uses a simple flat per-image price.


Parameters

ParameterRequiredDescription
promptYesText description of the image you want to generate.
widthNoOutput image width. Only takes effect when aspect_ratio is set to custom.
heightNoOutput image height. Only takes effect when aspect_ratio is set to custom.
lora_weightsNoURL or Hugging Face path to the LoRA weights you want to use. The LoRA must be trained with the Pruna T2I Trainer.
lora_scaleNoControls how strongly the LoRA influences the generation.
hf_api_tokenNoHugging Face API token, useful when accessing a private LoRA repository.
aspect_ratioNoOutput aspect ratio. Use a preset ratio or custom.
output_formatNoOutput image format, such as png.
seedNoRandom seed for reproducibility. Use the same seed to get more consistent outputs.

How to Use

  1. Write your prompt — describe the subject, composition, style, lighting, and mood you want.
  2. Provide your LoRA — add lora_weights pointing to the LoRA you want to use.
  3. Adjust LoRA strength (optional) — set lora_scale to control how strongly the LoRA affects the result.
  4. Choose aspect ratio — use a preset ratio or select custom if you want direct control over width and height.
  5. Set width and height (optional) — these only take effect when aspect_ratio is set to custom.
  6. Add a Hugging Face token (optional) — use hf_api_token if your LoRA is hosted in a private Hugging Face repository.
  7. Set a seed (optional) — use a fixed seed for more reproducible generations.
  8. Submit — run the model and download the generated image.

Example Prompt

comic noir art style, a detective standing under a street lamp in the rain


Pricing

Just $0.005 per image.


Best Use Cases

  • Custom style generation — Apply a trained LoRA to generate images in a specific visual style.
  • Character and concept generation — Use LoRAs trained for specific characters, identities, or art directions.
  • Brand or aesthetic consistency — Keep outputs aligned with a known visual language.
  • Creative prototyping — Explore prompt variations with a reusable LoRA model.
  • Specialized artwork generation — Generate images for niche styles that standard prompting alone may not capture as reliably.

Pro Tips

  • Make sure your lora_weights come from a LoRA trained with the Pruna T2I Trainer.
  • Keep prompts clear and focused so the LoRA can guide the result more effectively.
  • Adjust lora_scale gradually to find the right balance between prompt influence and LoRA influence.
  • Use custom aspect ratio only when you need exact width and height control.
  • If your LoRA is stored in a private Hugging Face repo, provide hf_api_token so it can be accessed properly.
  • Reuse the same seed when you want more consistent iterations of the same concept.

Notes

  • prompt is required.
  • width and height only take effect when aspect_ratio is set to custom.
  • lora_weights must point to a LoRA trained by the Pruna T2I Trainer.
  • hf_api_token is only needed when the LoRA repository is private or otherwise requires authentication.
  • Pricing is fixed at $0.005 per image.

Tested Example

{

“prompt”: “comic noir art style, a detective standing under a street lamp in the rain”,

“lora_weights”: “huggingface.co/PrunaAI/p-image-comic-noir-art-lora/weights.safetensors”,

“lora_scale”: 0.8,

“aspect_ratio”: “1:1”,

“output_format”: “png” }


Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "width": 512,
  "height": 512,
  "lora_scale": 0.5,
  "aspect_ratio": "custom",
  "output_format": "png",
  "seed": -1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/pruna-ai/p-image/text-to-image-lora" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}")
  RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-The positive prompt for generation.
widthintegerNo512256 ~ 1440Output image width in pixels.
heightintegerNo512256 ~ 1440Output image height in pixels.
lora_weightsstringNo--LoRA weights in Hugging Face format, for example huggingface.co/PrunaAI/p-image-comic-noir-art-lora/weights.safetensors.
lora_scalenumberNo0.5-1 ~ 3Scale of the LoRA weights.
hf_api_tokenstringNo--Optional Hugging Face API token used to access the LoRA weights.
aspect_ratiostringNocustom1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, customAspect ratio of the generated image.
output_formatstringNopngpng, jpeg, webpOutput image format.
seedintegerNo-1-Random seed. -1 means random.
enable_sync_modebooleanNofalse-If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models.
enable_base64_outputbooleanNofalse-If set to `true`, the prediction's `output` strings are returned as **naked base64** (no `data:<mime>;base64,` prefix). When `false` (default), outputs are returned as URLs pointing to our CDN.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.