Ideogram Deploy Integration
Overview
Deploy Ideogram image generation endpoints to Vercel, Cloud Run, or Docker. Key concerns: API key security, function timeouts (generation takes 5-15s), image persistence (URLs expire), and CDN integration for serving generated images.
Prerequisites
IDEOGRAM_API_KEY configured
- Cloud storage for generated images (S3, GCS, or R2)
- Platform CLI installed (vercel, gcloud, or docker)
Instructions
Step 1: API Endpoint (Next.js / Vercel)
// app/api/generate/route.ts
import { NextRequest, NextResponse } from "next/server";
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({ region: process.env.AWS_REGION });
export async function POST(req: NextRequest) {
const { prompt, style, aspectRatio } = await req.json();
if (!prompt || prompt.length > 10000) {
return NextResponse.json({ error: "Invalid prompt" }, { status: 400 });
}
// Generate image via Ideogram
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: "V_2",
style_type: style || "AUTO",
aspect_ratio: aspectRatio || "ASPECT_1_1",
magic_prompt_option: "AUTO",
},
}),
});
if (!response.ok) {
const err = await response.text();
return NextResponse.json({ error: `Generation failed: ${response.status}` }, { status: 502 });
}
const result = await response.json();
const image = result.data[0];
// Download and persist to S3 (Ideogram URLs expire)
const imgResponse = await fetch(image.url);
const buffer = Buffer.from(await imgResponse.arrayBuffer());
const key = `generated/${image.seed}-${Date.now()}.png`;
await s3.send(new PutObjectCommand({
Bucket: process.env.S3_BUCKET!,
Key: key,
Body: buffer,
ContentType: "image/png",
}));
return NextResponse.json({
url: `https://${process.env.CDN_DOMAIN}/${key}`,
seed: image.seed,
resolution: image.resolution,
style: image.style_type,
});
}
export const maxDuration = 60; // Vercel function timeout