Skip to main content

Pruna AI

OpenTryOn integrates Pruna's unified predictions API (POST /v1/predictions with a Model header) through a shared client in tryon.api.pruna.client.PrunaClient.

ModelCLIAdapterRole
p-imagegenerate --model p-imagePImageAdapterUltra-fast text-to-image
p-image-ideogramgenerate --model p-image-ideogramPImageIdeogramAdapterPruna × Ideogram T2I (thinking levels)
p-image-editedit --model p-image-editPImageEditAdapterEdit / compose 1–5 images
p-image-upscaleedit --model p-image-upscalePImageUpscaleAdapterUpscale to 1–128 MP
p-image-try-onvton --model p-image-tryonPImageTryOnAdapterMulti-garment virtual try-on
p-videovideo-generate --model p-videoPVideoAdapterT2V / I2V (+ optional audio)
p-video-2-provideo-generate --model p-video-2-proPVideo2ProAdapterFast MiniMax H3-based T2V / I2V (always-on generated audio)
p-video-replacevideo-generate --model p-video-replacePVideoReplaceAdapterIdentity swap in a source clip
p-video-avatarvideo-generate --model p-video-avatarPVideoAvatarAdapterTalking-head from portrait + script/audio
p-video-animatevideo-generate --model p-video-animatePVideoAnimateAdapterAnimate a subject with source motion

Auth: PRUNA_API_KEY (optional PRUNA_BASE_URL). Key is sent as the apikey header.

Docs: Pruna model guides · P-Image-Ideogram · P-Video-2-Pro

Ideogram 4.0 via Pruna is skipped — use opentryon generate --model ideogram (IDEOGRAM_API_KEY). P-Image-Ideogram is a different model: opentryon generate --model p-image-ideogram (PRUNA_API_KEY). Full notes: P-Image-Ideogram.

Shared client​

All adapters upload local files via /v1/files, create predictions with Try-Sync: true by default, and poll /v1/predictions/status/{id} when needed. Try-on lives under tryon.api.vton for historical reasons but reuses the same client; image/video models live in tryon.api.pruna.

Authentication​

export PRUNA_API_KEY="your_api_key"
# optional:
# export PRUNA_BASE_URL="https://api.pruna.ai"

CLI examples​

# Text-to-image
opentryon generate --model p-image \
--prompt "editorial fashion still, soft window light" \
--aspect-ratio 3:4

opentryon generate --model p-image-ideogram \
--prompt 'Lookbook cover. Exact visible text only: "ATELIER NOIR"' \
--thinking high --image-size 2K --aspect-ratio 3:4

# Multi-image edit
opentryon edit --model p-image-edit \
--images person.jpg garment.jpg \
--prompt "Dress the person in the garment, studio lighting"

# Upscale
opentryon edit --model p-image-upscale \
--image result.jpg --target 8 --enhance-details

# Multi-garment try-on
opentryon vton --model p-image-tryon \
--person-image person.jpg \
--garment-image top.jpg --garment-image bottoms.jpg

# Text / image to video
opentryon video-generate --model p-video \
--prompt "model walks toward camera, soft breeze" \
--duration 5 --resolution 720p

opentryon video-generate --model p-video \
--prompt "gentle head turn and smile" \
--image still.jpg --duration 5

# Faster MiniMax H3-based sibling (always-on generated audio, no audio input)
opentryon video-generate --model p-video-2-pro \
--prompt "model walks toward camera, soft breeze" \
--duration 8 --resolution 768p --mode speed

# Identity replace in video
opentryon video-generate --model p-video-replace \
--video source.mp4 \
--images identity.jpg \
--instruction-prompt "Place the reference person into the video"

# Talking-head avatar (script or audio)
opentryon video-generate --model p-video-avatar \
--image portrait.jpg \
--voice-script "Welcome to our spring collection." \
--voice "Zephyr (Female)"

opentryon video-generate --model p-video-avatar \
--image portrait.jpg \
--audio speech.mp3

# Animate subject with source motion
opentryon video-generate --model p-video-animate \
--video driver.mp4 \
--image subject.jpg \
--instruction-prompt "Keep the subject’s outfit and lighting"

Python quick start​

from dotenv import load_dotenv
load_dotenv()

from tryon.api.pruna import (
PImageAdapter,
PImageEditAdapter,
PImageIdeogramAdapter,
PImageUpscaleAdapter,
PVideoAdapter,
PVideo2ProAdapter,
PVideoAnimateAdapter,
PVideoAvatarAdapter,
PVideoReplaceAdapter,
)
from tryon.api.vton import PImageTryOnAdapter

# Generate
images = PImageAdapter().generate_text_to_image(
prompt="luxury knitwear flatlay on marble",
aspect_ratio="1:1",
)
images[0].save("out.png")

ideogram = PImageIdeogramAdapter().generate_text_to_image(
prompt='Lookbook cover. Exact visible text only: "ATELIER NOIR"',
thinking="high",
image_size="2K",
)
ideogram[0].save("p-image-ideogram.jpg")

# Edit
edited = PImageEditAdapter().generate_image_edit(
prompt="Replace the background with a clean studio",
image=["photo.jpg"],
)

# Upscale
hires = PImageUpscaleAdapter().upscale(image="out.png", target=8)

# Try-on
tryon = PImageTryOnAdapter().generate_and_decode(
person_image="person.jpg",
garment_images=["top.jpg", "bottoms.jpg"],
)

# Video
mp4 = PVideoAdapter().generate_text_to_video(
prompt="runway walk, cinematic tracking shot",
duration=5,
resolution="720p",
)
open("clip.mp4", "wb").write(mp4)

fast_mp4 = PVideo2ProAdapter().generate_text_to_video(
prompt="runway walk, cinematic tracking shot",
duration=8,
resolution="768p",
mode="speed",
)
open("fast_clip.mp4", "wb").write(fast_mp4)

replaced = PVideoReplaceAdapter().generate_video_replace(
video="source.mp4",
images=["identity.jpg"],
)

avatar = PVideoAvatarAdapter().generate_video_avatar(
image="portrait.jpg",
voice_script="Welcome to our spring collection.",
)

animated = PVideoAnimateAdapter().generate_video_animate(
video="driver.mp4",
image="subject.jpg",
)

Parameter notes​

P-Image​

  • Required: prompt
  • Optional: aspect_ratio (incl. custom + width/height), seed, prompt_upsampling, LoRA fields

P-Image-Ideogram​

  • Required: prompt (natural language or Ideogram 4.0 JSON)
  • Optional: thinking (very-low … very-high, default high), image_size (1K/2K), aspect_ratio (default 1:1), prompt_upsampling (default on)
  • Typography: high or very-high at 2K; --no-prompt-upsampling for final JSON specs
  • See P-Image-Ideogram

P-Image-Edit​

  • Required: prompt, 1–5 images
  • Optional: aspect_ratio (default match_input_image), turbo (default True), seed

P-Image-Upscale​

  • Required: image
  • Optional: target MP (1–128, default 4), output_format, enhance_details, enhance_realism

P-Image-Try-On​

  • Required: person image + ≥1 garment image (up to 11; 6 recommended)
  • Optional: prompt, turbo, reference_pose, output_format / output_quality
  • Pricing (per Pruna): $0.015 first garment + $0.008 each additional

P-Video​

  • Required: prompt
  • Optional: image (I2V), audio (duration follows audio), duration 1–20s, resolution 720p/1080p, fps 24/48, draft, prompt_upsampling

P-Video-2-Pro​

  • Required: prompt
  • Optional: image (I2V), last_frame_image, duration 5–15s (default 5), resolution 480p/768p (default 768p), aspect_ratio, mode speed/quality (default speed), prompt_upsampler off/turbo/max (default turbo), seed
  • Fixed 24fps; audio is always generated and cannot be supplied as input (unlike p-video)

P-Video-Replace​

  • Required: source video, 1–3 identity images
  • Optional: instruction_prompt, resolution, target_fps, turbo, audio flags

P-Video-Avatar​

  • Required: portrait image, plus voice_script and/or audio (audio wins if both)
  • Optional: voice, voice_language, resolution, video_prompt, voice_prompt, negative-prompt fields

P-Video-Animate​

  • Required: source video, subject image
  • Optional: instruction_prompt, resolution, target_fps, turbo, audio flags

See Also​