ideogram-performance-tuning
Strategies for reducing latency and costs when using the Ideogram API, covering caching and model throughput optimization.
Install
mkdir -p .claude/skills/ideogram-performance-tuning && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5342" && unzip -o skill.zip -d .claude/skills/ideogram-performance-tuning && rm skill.zipInstalls to .claude/skills/ideogram-performance-tuning
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Optimize Ideogram API performance with caching, model selection, andKey capabilities
- →Select Ideogram model and rendering speed based on use case
- →Implement a prompt-based cache layer to prevent duplicate image generations
- →Manage parallel image generation with concurrency limits
- →Upload generated images to a CDN for faster delivery
- →Optimize image generation for speed, cost, and throughput
- →Download generated image URLs immediately to prevent expiration
How it works
The skill optimizes Ideogram image generation by selecting appropriate model speeds, caching results based on prompt hashes, controlling parallel generation concurrency, and uploading images to a CDN.
Inputs & outputs
When to use ideogram-performance-tuning
- →Optimizing latency for production image generation
- →Implementing caching layers to reduce redundant costs
- →Selecting appropriate model speed tiers
- →Managing concurrency for high-throughput image requests
About this skill
Ideogram Performance Tuning
Overview
Optimize Ideogram image generation for speed, cost, and throughput. Key levers: model and rendering speed selection, prompt-based caching, parallel generation with concurrency limits, and CDN delivery of generated assets.
Performance Baselines
| Model / Speed | Typical Latency | Relative Cost | Quality |
|---|---|---|---|
| V_2_TURBO | 3-6s | ~$0.05/image | Good |
| V_2 | 8-15s | ~$0.08/image | High |
| V3 FLASH | 2-4s | Lowest | Draft |
| V3 TURBO | 4-8s | Low | Good |
| V3 DEFAULT | 8-15s | Standard | High |
| V3 QUALITY | 15-25s | Premium | Highest |
Instructions
Step 1: Speed Tiers by Use Case
const SPEED_CONFIGS = {
// Preview / draft mode -- fastest, cheapest
preview: {
endpoint: "https://api.ideogram.ai/generate",
model: "V_2_TURBO",
note: "3-6s, good enough for iteration",
},
// Standard production -- balanced
standard: {
endpoint: "https://api.ideogram.ai/generate",
model: "V_2",
note: "8-15s, high quality for final assets",
},
// V3 with speed control
v3_fast: {
endpoint: "https://api.ideogram.ai/v1/ideogram-v3/generate",
rendering_speed: "TURBO",
note: "4-8s, V3 quality at faster speed",
},
v3_quality: {
endpoint: "https://api.ideogram.ai/v1/ideogram-v3/generate",
rendering_speed: "QUALITY",
note: "15-25s, maximum quality",
},
} as const;
function getConfig(tier: keyof typeof SPEED_CONFIGS) {
return SPEED_CONFIGS[tier];
}
Step 2: Prompt-Based Cache Layer
import { createHash } from "crypto";
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
import { join } from "path";
const CACHE_DIR = "./ideogram-cache";
function cacheKey(prompt: string, style: string, aspect: string): string {
return createHash("sha256")
.update(`${prompt.toLowerCase().trim()}:${style}:${aspect}`)
.digest("hex")
.slice(0, 16);
}
async function cachedGenerate(
prompt: string,
options: { style_type?: string; aspect_ratio?: string; model?: string } = {}
) {
const style = options.style_type ?? "AUTO";
const aspect = options.aspect_ratio ?? "ASPECT_1_1";
const key = cacheKey(prompt, style, aspect);
const metaPath = join(CACHE_DIR, `${key}.json`);
const imgPath = join(CACHE_DIR, `${key}.png`);
// Return cached if exists
if (existsSync(metaPath) && existsSync(imgPath)) {
console.log(`Cache hit: ${key}`);
return JSON.parse(readFileSync(metaPath, "utf-8"));
}
// Generate and cache
const response = await fetch("https://api.ideogram.ai/generate", {
method: "POST",
headers: {
"Api-Key": process.env.IDEOGRAM_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
image_request: {
prompt,
model: options.model ?? "V_2",
style_type: style,
aspect_ratio: aspect,
magic_prompt_option: "AUTO",
},
}),
});
if (!response.ok) throw new Error(`Generate failed: ${response.status}`);
const result = await response.json();
const image = result.data[0];
// Download and cache
const imgResp = await fetch(image.url);
const buffer = Buffer.from(await imgResp.arrayBuffer());
mkdirSync(CACHE_DIR, { recursive: true });
writeFileSync(imgPath, buffer);
writeFileSync(metaPath, JSON.stringify({
...image,
localPath: imgPath,
cachedAt: new Date().toISOString(),
}));
return { ...image, localPath: imgPath };
}
Step 3: Parallel Generation with Concurrency Control
import PQueue from "p-queue";
// 8 concurrent (under Ideogram's 10 in-flight limit)
const queue = new PQueue({ concurrency: 8 });
async function parallelGenerate(
prompts: string[],
options: { style_type?: string; model?: string } = {}
) {
const start = Date.now();
const results = await Promise.all(
prompts.map(prompt =>
queue.add(() => cachedGenerate(prompt, options))
)
);
const elapsed = ((Date.now() - start) / 1000).toFixed(1);
console.log(`Generated ${results.length} images in ${elapsed}s`);
console.log(`Throughput: ${(results.length / (elapsed as any)).toFixed(2)} img/s`);
return results;
}
// Generate 20 images -- queue manages concurrency automatically
const prompts = Array.from({ length: 20 }, (_, i) => `Product design variant ${i + 1}`);
await parallelGenerate(prompts, { style_type: "DESIGN", model: "V_2_TURBO" });
Step 4: CDN Upload for Fast Delivery
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({ region: "us-east-1" });
async function generateWithCDN(prompt: string, options: any = {}) {
const result = await cachedGenerate(prompt, options);
// Upload to S3 for CDN delivery
const key = `ideogram/${result.seed}.png`;
const buffer = readFileSync(result.localPath);
await s3.send(new PutObjectCommand({
Bucket: process.env.S3_BUCKET!,
Key: key,
Body: buffer,
ContentType: "image/png",
CacheControl: "public, max-age=31536000, immutable",
}));
return {
cdnUrl: `https://${process.env.CDN_DOMAIN}/${key}`,
seed: result.seed,
resolution: result.resolution,
};
}
Performance Tips
- Use TURBO for drafts -- V_2_TURBO is 2-3x faster than V_2 at lower cost
- Cache by prompt hash -- identical prompts produce cacheable results
- Batch with num_images -- 4 images in 1 call is faster than 4 separate calls
- Download immediately -- URLs expire; download in the same function
- Set CDN headers -- images are immutable once generated; cache forever
- Use V3 FLASH for previews -- fastest option for UI thumbnails
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Rate limit 429 | Concurrency too high | Reduce queue concurrency to 5-8 |
| Slow generation | QUALITY speed or complex prompt | Use TURBO for drafts, simplify prompts |
| Expired URL | Delayed download | Download immediately in same function |
| Cache stale | Prompt changed slightly | Normalize prompts before hashing |
Output
- Speed-tiered configuration for different use cases
- Prompt-based cache layer preventing duplicate generations
- Parallel generation with concurrency control
- CDN integration for fast image delivery
Resources
Next Steps
For cost optimization, see ideogram-cost-tuning.
When not to use it
- →When Ideogram API URLs are stored without immediate download
- →When using V3 FLASH for final high-quality assets
Limitations
- →Ideogram API URLs are temporary and expire
- →Rate limits can be hit with high concurrency
- →Complex prompts or QUALITY speed can lead to slow generation
How it compares
This skill provides specific strategies for Ideogram API performance, such as model speed tiers and prompt-based caching, which differ from general API optimization techniques.
Compared to similar skills
ideogram-performance-tuning side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| ideogram-performance-tuning (this skill) | 1 | 27d | Caution | Intermediate |
| chrome-devtools | 41 | 7mo | Review | Intermediate |
| bullmq-specialist | 25 | 6mo | No flags | Intermediate |
| perf-lighthouse | 13 | 5mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
chrome-devtools
mrgoonie
Browser automation, debugging, and performance analysis using Puppeteer CLI scripts. Use for automating browsers, taking screenshots, analyzing performance, monitoring network traffic, web scraping, form automation, and JavaScript debugging.
bullmq-specialist
davila7
BullMQ expert for Redis-backed job queues, background processing, and reliable async execution in Node.js/TypeScript applications. Use when: bullmq, bull queue, redis queue, background job, job queue.
perf-lighthouse
tech-leads-club
Run Lighthouse audits locally via CLI or Node API, parse and interpret reports, set performance budgets. Use when measuring site performance, understanding Lighthouse scores, setting up budgets, or integrating audits into CI. Triggers on: lighthouse, run lighthouse, lighthouse score, performance audit, performance budget.
agentdb-performance-optimization
ruvnet
Optimize AgentDB performance with quantization (4-32x memory reduction), HNSW indexing (150x faster search), caching, and batch operations. Use when optimizing memory usage, improving search speed, or scaling to millions of vectors.
redis-inspect
civitai
Inspect Redis cache keys, values, and TTLs for debugging. Supports both main cache and system cache. Use for debugging cache issues, checking cached values, and monitoring cache state. Read-only by default.
turborepo-caching
wshobson
Configure Turborepo for efficient monorepo builds with local and remote caching. Use when setting up Turborepo, optimizing build pipelines, or implementing distributed caching.