Image Generation

Learn how to generate images using TurboAPI.

TurboAPI provides unified access to leading image generation models including DALL-E 3, Midjourney, and Stable Diffusion.

Generate Images

import { TurboAPIClient } from '@turboapiai/sdk';

const client = new TurboAPIClient({
  apiKey: process.env.TURBOAPI_API_KEY,
});

// Generate an image using an image generation API
const task = await client.call.createAndWait('api-slug', {
  prompt: 'A beautiful sunset over mountains with golden light',
});

console.log(task.output);

Image to Image

Transform existing images:

const task = await client.call.createAndWait('api-slug', {
  image_url: 'https://example.com/input.jpg',
  prompt: 'Turn this into a painting style',
});

Parameters

ParameterTypeRequiredDescription
input_paramsobjectYesAPI-specific input parameters
webhook_urlstringNoCallback URL for async completion
idempotency_keystringNoIdempotency key to prevent duplicate tasks

Task-Based Execution

All API calls return a task object:

// Create a task and wait for completion
const task = await client.call.createAndWait('api-slug', {
  input_param: 'value',
});

console.log('Task output:', task.output);
console.log('Task status:', task.status);

You can also create a task and check its status later:

// Create a task asynchronously
const task = await client.call.create('api-slug', {
  input_param: 'value',
});

// Check status later
const status = await client.call.get(task.id);
console.log(status.output);

Response

{
  "id": "task_123",
  "status": "completed",
  "output": {
    "url": "https://...",
    "revised_prompt": "..."
  },
  "created_at": "2025-01-01T00:00:00Z"
}

Advanced Features

Negative Prompts

Tell the model what NOT to generate:

const task = await client.call.createAndWait('api-slug', {
  prompt: 'A beautiful portrait',
  negative_prompt: 'blurry, low quality, distorted, extra limbs',
});

Image Variations

Generate variations based on an existing image:

const task = await client.call.createAndWait('api-slug', {
  image: imageBuffer,
});

Image Inpainting

Edit specific regions of an image:

const task = await client.call.createAndWait('api-slug', {
  image: originalImageBuffer,
  mask: maskBuffer, // Transparent areas will be regenerated
  prompt: 'Add a rainbow to the sky',
});

Prompt Tips

Be Specific

Good: A fluffy golden retriever running through a sunny park with green grass
Bad: Dog

Mention Style

Good: Cyberpunk city at night, neon lights reflecting on wet streets
Bad: City night

Use Quality Keywords

Good: High quality photo, 8K resolution, professional photography
Bad: Just draw something

Code Examples

Batch Generation

async function generateMultipleImages(prompts: string[]) {
  const results = await Promise.all(
    prompts.map((prompt) =>
      client.call.createAndWait('api-slug', { prompt })
    )
  );
  return results;
}

const prompts = [
  'A beach at sunset',
  'A mountain cabin in the snow',
  'A rainy city street',
];

const images = await generateMultipleImages(prompts);

Download and Process

import { writeFile } from 'fs/promises';

async function downloadOutput(url: string, filename: string) {
  const response = await fetch(url);
  const buffer = await response.arrayBuffer();
  await writeFile(filename, Buffer.from(buffer));
  console.log(`Output saved to ${filename}`);
}

// Usage
const task = await client.call.createAndWait('api-slug', {
  prompt: 'Colorful butterfly',
});

if (task.output?.url) {
  await downloadOutput(task.output.url, 'butterfly.png');
}

Best Practices

  1. Be specific in your prompt
  2. Mention style (photorealistic, oil painting, anime)
  3. Specify lighting (golden hour, neon, natural)
  4. Include composition details (portrait, landscape, close-up)
Tip: Start with simple prompts and iterate based on results.
Image generation may take some time, especially with high quality settings. Please be patient.