Prerequisites
Install and load these skills before generating (skip if already in context via @pruna):
| Skill | Description | Install |
|---|---|---|
generation-diversity |
Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | npx skills add PrunaAI/pruna-skills@generation-diversity -y |
image-prompting |
Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | npx skills add PrunaAI/pruna-skills@image-prompting -y |
pruna-api |
Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | npx skills add PrunaAI/pruna-skills@pruna-api -y |
Or install the full suite once: npx skills add PrunaAI/pruna-skills@pruna -y
Follow each skill's Before generating / craft sections — do not restate guide content here.
Agent habit
Route by complexity: Use `p-image-ideogram` when photo generation needs more control — readable text in the image, structured JSON, hex/bbox placement, or high-detail photoreal shots. Use `p-image` for simple, quick photo generation. Use `p-image-edit` to change an existing photo; use `p-video-2-pro` / `p-video-2` (`p-video-animate` from a still) for motion.
In the first reply, name `p-image-ideogram` in backticks, confirm PRUNA_API_KEY is set (or stop with signup links from pruna-api), then ask for prompt / aspect ratio / any copy-on-surface (open intake → generation-diversity clarification intake). When drafting the prompt, follow Prompt craft below — do not paste skill examples.
Agent defaults (override API defaults): send thinking: "high", prompt_upsampling: true, and image_size: "1K" unless a profile in domain-configurations.md says otherwise. Use image_size: "2K" for dense in-image text, multi-panel layouts, and large output. Set prompt_upsampling: false when text is locked (JSON prompts, exact strings) or the user wants verbatim prompts only.
Premium path: when the user requests maximum quality or the composition is highly complex (many text elements, intricate multi-panel layouts, detailed structured scenes), send thinking: "very high" + image_size: "2K". Costs ~2× high ($0.033/1K, $0.066/2K) — confirm with the user before using unless they explicitly asked for top quality.
Speed path (same model): when the scene is simpler but you still want ideogram (or need a faster pass on this model), send thinking: "low", prompt_upsampling: false, and a nuanced, explicit prompt you fully draft — upsampling stays off because the prompt already carries the detail. Faster than the default high + upsampling path. For the simplest quick photo drafts, route to p-image instead.
When the job comes from a vertical-* workflow (or another multi-step production with spec copy or covers), pick thinking, image_size, and NL vs JSON from domain-configurations.md for that vertical and use-case # — do not use one global knob set for every industry.
vs p-image
`p-image-ideogram` |
`p-image` |
|
|---|---|---|
| When | More control — text in the image, JSON layout, hex/bbox, detailed photoreal photos |
Simple, quick photo generation from a short prompt |
| Quality | Strong photorealism and typography; five thinking levels (very low to very high); 1K / 2K |
Good quality, extremely fast; no prompt upsampling |
| Prompt upsampling | true by default (high path); false on speed path or locked copy / JSON |
None — concrete language is the whole craft |
| Knob default | thinking: high + prompt_upsampling: true |
Single fast pass — no thinking/upsampling knobs |
| Structured layout | Ideogram 4.0 JSON caption in prompt (hex, bbox, "text" elements) — see ideogram-json-prompting.md |
Avoid dense readable type |
Official parameters: P-Image-Ideogram
Prompt craft (dynamic + faithful)
Every input.prompt must be fresh and specific, and must keep the user's request. Diversity never overrides what the user asked for.
| Do | Don't |
|---|---|
Run the generation-diversity random seed ritual; state it; rotate ≥2 free axes (camera, lighting, setting texture, render category) |
Copy curl examples from this skill or reuse a prior session's prompt verbatim |
| Lock user-required facts first (subject, product, brand cues, must-keep props, exact strings for text in the image) | Swap the subject for a “cooler” scene that ignores the request |
For structured layouts, use the Ideogram JSON caption schema in input.prompt when placement, palette, or repeatability matter; otherwise name panels, literal copy, and hex in natural language |
Chain p-image-edit to fix multi-panel copy — regenerate the photo instead |
Expand with concrete nouns, frozen action, materials, placement (image-prompting golden rules) |
Vague mood-only strings (cool product vibe, neon) |
Show drafted prompt + thinking + image_size + aspect_ratio + prompt_upsampling before POST when the user has not locked wording |
Silent regen with a different subject than approved |
Fidelity check (before pay): if you remove the user’s named subject/product/setting from the prompt, the job is wrong — rewrite. Free axes only fill what the user did not specify.
Typography: list every string and surface; use image_size: "2K" and prompt_upsampling: false when legibility is critical (default thinking: "high"). Domain-specific profiles and vertical rows: domain-configurations.md. JSON captions (exact placement, brand hex, repeatable layout): ideogram-json-prompting.md.
Thinking & resolution
thinking |
Best for |
|---|---|
very low |
Basic photos, fastest ideogram pass |
low |
Speed path — pair with prompt_upsampling: false and a nuanced explicit prompt; faster than the default when the scene is simpler but ideogram is still the right model |
medium |
Middle ground when high is heavier than needed but the prompt is not fully self-contained |
high |
Default agent choice — text in the image, multi-panel layouts, editorial portraits; pair with image_size: "2K" when legibility or large output matters |
very high |
Maximum quality — complex compositions with multiple text elements, intricate layouts, or when the absolute best output justifies the ~2× cost over high; pair with image_size: "2K" for best results |
When NOT to use
Use a different skill instead:
| Skill | Description | Install |
|---|---|---|
p-image |
Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | npx skills add PrunaAI/pruna-skills@p-image -y |
p-image-edit |
Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | npx skills add PrunaAI/pruna-skills@p-image-edit -y |
p-image-try-on |
Use when someone wants virtual try-on — dress a person in clothes from reference photos for fashion or ecommerce. | npx skills add PrunaAI/pruna-skills@p-image-try-on -y |
HTTP (curl)
Create (async — recommended)
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-image-ideogram' \
-d '{
"input": {
"prompt": "South Asian woman founder mid-30s, documentary portrait at cast-iron loft window, natural skin pores, mouth visible, hands away from mouth, golden hour side light, photoreal editorial",
"thinking": "high",
"image_size": "1K",
"prompt_upsampling": true,
"aspect_ratio": "9:16"
}
}'
Poll and download: follow pruna-api.
Complete the random seed ritual from generation-diversity before writing prompts — do not pass the ritual string as API seed. Optional seed only when the user requests reproducibility.
Create (sync — quick test only)
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-image-ideogram' \
-H 'Try-Sync: true' \
-d '{"input":{"prompt":"Hong Kong neon alley at night, fearless grandmother in floral apron juggling dumplings, awning reads HAPPY HOUR 5-7, kiosk sign PRUNA AI, fish-eye lens, crisp legible typography","thinking":"high","image_size":"2K","prompt_upsampling":true,"aspect_ratio":"9:16"}}'
Generation flow
Follow generation-diversity still-image prompt flow every time:
- Lock the request — subject, product, format, any text on the image.
- Ritual seed — fresh string; derive free axes (camera, lighting,
render_category_tag,aspect_ratiowhen unset). - Pick knobs — domain-configurations.md profile for the vertical/use case, else default
thinking: high,image_size: 1K,prompt_upsampling: true; or speed path —thinking: low,prompt_upsampling: false, nuanced explicit prompt; or premium path —thinking: "very high",image_size: "2K"for maximum quality on complex compositions; raiseimage_sizeto2Kfor dense in-image text or multi-panel layouts; setprompt_upsampling: falsefor locked text or JSON. - Draft explicit prompt — Prompt craft +
image-promptinggolden rules; fidelity check before pay. - Confirm — show
prompt+ knobs unless wording is locked. - POST — async curl below; poll via
pruna-api; runp-imagequality checklist inimage-promptingbefore upscale/video.
Aspect ratio: pass aspect_ratio in input; if output dimensions do not match (e.g. asked 16:9, got portrait), retry once with explicit horizontal wide / vertical wording in the prompt.
Mood board / batch: new ritual per independent photo; different aspect_ratio per panel when format not locked.
Photo approved → edit: hand off to p-image-edit on the output URL for photo edits — do not run photo generation again for the same subject; do not use edit to fix dense multi-panel in-image text (regenerate instead).
Photo approved → video: use p-video (image-to-video) or p-video-animate when motion is next; upscale first with p-image-upscale if resolution is tight.
Required input
prompt(string)
Common optional fields
thinking:very low,low,medium,high,very high— defaulthigh;low+prompt_upsampling: false+ explicit prompt for the speed path;very highfor maximum quality on complex compositionsimage_size:1K,2K(ignored whenaspect_ratioiscustom)prompt_upsampling: boolean — defaulttruewiththinking: high;falseon speed path, locked copy, JSON prompts, or verbatim wordingaspect_ratio:1:1,16:9,9:16,4:3,3:4,3:2,2:3,custom(withwidth/heightup to 2560, multiples of 16)seed,output_format(jpg,png,webp),output_quality(0–100; ignored forpng)
Typical next steps
Common follow-ons after this skill:
| Skill | Description | Install |
|---|---|---|
p-image-edit |
Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | npx skills add PrunaAI/pruna-skills@p-image-edit -y |
p-image-try-on |
Use when someone wants virtual try-on — dress a person in clothes from reference photos for fashion or ecommerce. | npx skills add PrunaAI/pruna-skills@p-image-try-on -y |
p-image-upscale |
Use when someone wants to upscale or sharpen an existing image for print, large crops, or higher-quality delivery. | npx skills add PrunaAI/pruna-skills@p-image-upscale -y |
p-video-2-pro |
Use when someone wants a cinematic clip from text or start/end frames — product ads, documentary shots, or dialogue with generated audio. Not for 1080p, imported audio tracks, or talking-head-only hosts. | npx skills add PrunaAI/pruna-skills@p-video-2-pro -y |
p-video-2 |
Use when someone wants a polished short clip from text, images, or imported audio — 1080p B-roll, start/end frame animation, or a motion shot with a mixed track. Not for cinematic generated-audio clips or talking-head-only hosts. | npx skills add PrunaAI/pruna-skills@p-video-2 -y |
p-video |
Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs cinematic generation, highest quality, tight lip-sync, or imported audio at 1080p. | npx skills add PrunaAI/pruna-skills@p-video -y |
p-video-avatar |
Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | npx skills add PrunaAI/pruna-skills@p-video-avatar -y |