Pruna AI P Image Text To Image Trainer API Documentation

Pruna AI P Image Text To Image Trainer API Documentation

Playground

Try it on WaveSpeedAI!

Pruna AI P-Image Text to Image Trainer is a fast AI model training workflow for customizing text-to-image generation models with user-provided data. Ready-to-use REST inference API for training custom styles, brand-specific visuals, character concepts, product image generation, marketing creatives, and personalized AI image workflows with simple integration, no coldstarts, and affordable pricing.

Features

Pruna AI P-Image Text-to-Image Trainer is a fast training workflow for creating custom LoRAs for the Pruna text-to-image ecosystem. Upload your training image data, optionally provide a default caption, choose the number of training steps, and generate a LoRA that can be used to steer future image generation toward your style, subject, or brand look.


Why Choose This?

  • Fast custom LoRA training Train a text-to-image LoRA for specialized styles, subjects, or branded visuals.

  • Simple training interface Provide your training image data, optional default caption, and training steps without a complex setup process.

  • Optional caption guidance Use default_caption to provide consistent text conditioning across the training dataset.

  • Flexible training depth Use steps to balance speed, cost, and how strongly the LoRA learns your dataset.

  • Built for the Pruna image stack Trained outputs are intended for downstream use with Pruna text-to-image LoRA workflows.

  • Production-ready API Suitable for custom style pipelines, branded asset generation, and repeatable image workflow customization.


Parameters

ParameterRequiredDescription
image_dataYesTraining image data used to create the LoRA.
default_captionNoOptional default caption applied across the training workflow for more consistent conditioning.
stepsNoNumber of training steps. Higher values generally increase training time and cost. Default: 101.

How to Use

  1. Upload your training data — provide the image dataset you want to use for training.
  2. Add a default caption (optional) — use a short caption if you want more consistent text conditioning across the dataset.
  3. Set training steps — choose how many steps to run based on your desired balance of speed and training strength.
  4. Submit — start the training job.
  5. Use the trained LoRA — apply the resulting LoRA in downstream Pruna text-to-image LoRA workflows.

Example Workflow

Train a custom style LoRA from a curated image set, optionally using a shared default caption, then use the resulting weights in Pruna AI P-Image Text-to-Image LoRA for generation.


Pricing

Pricing is based on the selected steps value.

StepsCost
100$0.18
101$0.1818
250$0.45
500$0.90
1000$1.80
2000$3.60

Billing Rules

  • Pricing scales linearly with steps
  • Cost is $1.80 per 1,000 steps
  • Higher steps values increase total training cost proportionally
  • default_caption does not affect pricing

Best Use Cases

  • Custom style training — Create LoRAs for a distinct visual style or art direction.
  • Brand consistency — Train reusable LoRAs for campaigns, products, or branded aesthetics.
  • Subject-focused generation — Teach the model a recurring character, fashion look, or visual concept.
  • Creative workflow personalization — Build specialized LoRAs for repeatable prompt-driven generation.
  • Marketing asset pipelines — Create tailored generation tools for ongoing content production.

Pro Tips

  • Use a clean, consistent training dataset for better LoRA quality.
  • Add a default_caption when your dataset shares a common concept, subject, or style cue.
  • Start with a moderate number of steps before pushing to larger training runs.
  • Increase steps gradually if the initial LoRA is too weak or underfit.
  • Keep your dataset focused on the style or subject you want the LoRA to learn.
  • Test the trained LoRA in downstream generation workflows before scaling up training volume.

Notes

  • image_data is required.
  • default_caption is optional.
  • steps defaults to 101.
  • Pricing depends only on the selected steps value.
  • LoRAs trained here are intended for Pruna text-to-image LoRA usage.

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'
{
  "image_data": "https://github.com/mdn/interactive-examples/archive/refs/heads/main.zip",
  "steps": 101
}
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-trainer" \
  -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
image_datastringYes--Training image archive URL.
stepsintegerNo1011 ~ ∞Number of training steps.
default_captionstringNo--Default caption for images without .txt files. If captions are missing and this is empty, training can fail.

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.