ideogram-performance-tuning
SKILL.md
Ideogram Performance Tuning
Overview
Optimize Ideogram image generation pipelines for throughput, cost, and latency. Focus on prompt reuse, resolution selection, parallel generation, and CDN caching for generated assets.
Prerequisites
- Ideogram API key
- Image storage (S3, GCS, or local filesystem)
- Understanding of Ideogram generation parameters
- CDN or caching layer for generated images
Instructions
Step 1: Optimize Generation Parameters
const IDEOGRAM_API = 'https://api.ideogram.ai/generate';
// Quality tiers for different use cases
const QUALITY_PRESETS = {
draft: { resolution: '512x512', model: 'V_2', steps: 20 },
standard: { resolution: '1024x1024', model: 'V_2', steps: 30 },
premium: { resolution: '1024x1024', model: 'V_2_TURBO', steps: 50 },
};
async function generateImage(
prompt: string,
preset: keyof typeof QUALITY_PRESETS = 'standard'
) {
const config = QUALITY_PRESETS[preset];
const response = await fetch(IDEOGRAM_API, {
method: 'POST',
headers: {
'Api-Key': process.env.IDEOGRAM_API_KEY!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
image_request: {
prompt,
aspect_ratio: 'ASPECT_1_1',
model: config.model,
magic_prompt_option: 'AUTO',
},
}),
});
return response.json();
}
Step 2: Prompt-Based Cache Layer
import { createHash } from 'crypto';
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
import { join } from 'path';
const CACHE_DIR = './image-cache';
function promptHash(prompt: string, preset: string): string {
return createHash('sha256')
.update(`${preset}:${prompt.toLowerCase().trim()}`)
.digest('hex')
.slice(0, 16);
}
async function cachedGenerate(prompt: string, preset = 'standard') {
const hash = promptHash(prompt, preset);
const cachePath = join(CACHE_DIR, `${hash}.json`);
if (existsSync(cachePath)) {
return JSON.parse(readFileSync(cachePath, 'utf-8'));
}
const result = await generateImage(prompt, preset as any);
mkdirSync(CACHE_DIR, { recursive: true });
writeFileSync(cachePath, JSON.stringify(result));
return result;
}
Step 3: Batch Generation with Concurrency Control
async function batchGenerate(
prompts: string[],
concurrency = 2 // Ideogram rate limits are strict
) {
const results: any[] = [];
for (let i = 0; i < prompts.length; i += concurrency) {
const batch = prompts.slice(i, i + concurrency);
const batchResults = await Promise.all(
batch.map(p => cachedGenerate(p))
);
results.push(...batchResults);
// Rate limit: ~10 requests/minute on standard plans
if (i + concurrency < prompts.length) {
await new Promise(r => setTimeout(r, 6000)); # 6000 = configured value
}
}
return results;
}
Step 4: Image Asset Pipeline
import { pipeline } from 'stream/promises';
import { createWriteStream } from 'fs';
async function downloadAndStore(imageUrl: string, outputPath: string) {
const response = await fetch(imageUrl);
if (!response.ok) throw new Error(`Download failed: ${response.status}`);
const fileStream = createWriteStream(outputPath);
await pipeline(response.body as any, fileStream);
return outputPath;
}
async function generateAndStore(prompt: string, outputDir: string) {
const result = await cachedGenerate(prompt);
const imageUrl = result.data?.[0]?.url;
if (!imageUrl) throw new Error('No image URL in response');
const hash = promptHash(prompt, 'standard');
const outputPath = join(outputDir, `${hash}.png`);
return downloadAndStore(imageUrl, outputPath);
}
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Rate limit 429 | Too many concurrent requests | Limit concurrency to 2, add 6s delays |
| Generation timeout | Complex prompt or high resolution | Use draft preset, simplify prompt |
| NSFW rejection | Content filter triggered | Review prompt for flagged terms |
| Expired URL | Image URLs are temporary | Download immediately, cache locally |
Examples
Brand Asset Batch Generation
const brandPrompts = [
'Minimalist logo for tech startup, blue gradient, clean lines',
'Social media banner, abstract geometric pattern, brand colors',
'App icon, rounded square, modern flat design',
];
const assets = await batchGenerate(brandPrompts);
console.log(`Generated ${assets.length} brand assets`);
Resources
Output
- Configuration files or code changes applied to the project
- Validation report confirming correct implementation
- Summary of changes made and their rationale
Weekly Installs
13
Repository
jeremylongshore…s-skillsGitHub Stars
1.6K
First Seen
Feb 18, 2026
Security Audits
Installed on
mcpjam13
claude-code13
replit13
junie13
windsurf13
zencoder13