Image Processing API

45+ image tools as a REST API. Resize, crop, filter, watermark, compose pipelines, and generate workflows with AI.

45+ Tools

Resize, crop, blur, sharpen, watermark, color adjust, effects, and more

Pipelines

Chain multiple tools in a single request — up to 20 steps

AI Workflows

Describe what you want in plain English, get a ready-to-run pipeline

Batch Processing

Process up to 10 images in one call with the same tool or pipeline

Overview

The launch.pics API lets you process images programmatically. Send an image (as a file upload or base64), choose a tool and parameters, and get the result back as base64 JSON or binary image.

Authentication

All /api/v1/ processing endpoints require an API key. Pass it via the X-API-Key header:

curl -X POST https://launch.pics/api/v1/resize \
  -H "X-API-Key: lp_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"image_base64": "...", "width": 800}'
The /api/v1/health and /api/v1/tools endpoints are public — no API key needed.

Base URL

https://launch.pics/api/v1

Rate Limits

EndpointLimit
Single tool processing200 requests/hour
Pipeline100 requests/hour
Batch50 requests/hour
AI workflow generation30 requests/hour

Rate limit headers are included in responses: X-RateLimit-Remaining, X-RateLimit-Reset.

Error Handling

Errors return JSON with an error field:

// 400 Bad Request
{"error": "No image provided. Send as multipart file (field: image) or JSON (image_base64)."}

// 401 Unauthorized
{"error": "API key required. Get one at https://launch.pics/docs/"}

// 403 Forbidden
{"error": "Invalid API key"}

// 404 Not Found
{"error": "Unknown tool: foo", "available": ["resize", "crop", ...]}

// 429 Too Many Requests
{"error": "Rate limit exceeded"}

// 500 Internal Server Error
{"error": "Processing failed: details..."}

Health Check

GET /api/v1/health

Check API status and discover available endpoints. No authentication required.

curl https://launch.pics/api/v1/health
{
  "status": "ok",
  "version": "1.0.0",
  "api": "launch.pics Image Processing API",
  "tools_count": 38,
  "endpoints": {
    "docs": "https://launch.pics/docs/",
    "tools": "/api/v1/tools",
    "process": "/api/v1/{tool}",
    "pipeline": "/api/v1/pipeline",
    "generate": "/api/v1/generate-workflow",
    "batch": "/api/v1/batch"
  }
}

List Tools

GET /api/v1/tools

List all available tools with their parameter specifications. No authentication required.

curl https://launch.pics/api/v1/tools

List Fonts

GET /api/v1/fonts

List all available fonts for text overlays, organized by category. No authentication required.

curl https://launch.pics/api/v1/fonts

Returns fonts organized into categories: sans-serif, serif, monospace, and display. Includes aliases like sans, serif, mono, bold, impact for convenience.

Use font names in any text tool via the font parameter: "font": "roboto-bold"

Popular Fonts

NameCategoryBest For
robotoSans-serifGeneral purpose, clean UI text
roboto-boldSans-serifHeadlines, emphasis
open-sansSans-serifBody text, readable at small sizes
latoSans-serifModern, elegant headings
lato-blackDisplayBold statements, headers
noto-serifSerifClassic, formal text
fira-codeMonospaceCode snippets, technical text
impactDisplayMemes, bold impact text

Process Image

POST /api/v1/{tool_name}

Apply a single tool to an image. Accepts both JSON (base64) and multipart form uploads.

Input Options

Option A: JSON body

curl -X POST https://launch.pics/api/v1/resize \
  -H "X-API-Key: lp_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "image_base64": "iVBORw0KGgo...",
    "width": 800,
    "height": 600,
    "mode": "contain"
  }'

Option B: Multipart form data

curl -X POST https://launch.pics/api/v1/resize \
  -H "X-API-Key: lp_your_key" \
  -F "image=@photo.jpg" \
  -F "width=800" \
  -F "mode=contain"

Output

Default response is JSON with base64-encoded image:

{
  "image_base64": "iVBORw0KGgo...",
  "format": "PNG",
  "size": {"width": 800, "height": 600},
  "tool": "resize"
}

For binary image response, set Accept: image/png (or image/jpeg, image/webp):

curl -X POST https://launch.pics/api/v1/resize \
  -H "X-API-Key: lp_your_key" \
  -H "Accept: image/png" \
  -F "image=@photo.jpg" \
  -F "width=800" \
  --output resized.png

Pipeline

POST /api/v1/pipeline

Chain multiple tools in sequence. Steps execute in order, each receiving the output of the previous step. Maximum 20 steps.

Request

curl -X POST https://launch.pics/api/v1/pipeline \
  -H "X-API-Key: lp_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "image_base64": "iVBORw0KGgo...",
    "steps": [
      {"tool": "resize", "params": {"width": 800}},
      {"tool": "contrast", "params": {"factor": 1.3}},
      {"tool": "sharpen", "params": {"amount": 1.5}},
      {"tool": "watermark", "params": {"text": "© 2026", "position": "bottom-right", "opacity": 128}},
      {"tool": "compress", "params": {"quality": 85, "format": "WEBP"}}
    ],
    "output_format": "WEBP",
    "quality": 85
  }'

Response

{
  "image_base64": "UklGRp4A...",
  "format": "WEBP",
  "original_size": {"width": 3000, "height": 2000},
  "final_size": {"width": 800, "height": 533},
  "steps_completed": [
    {"step": 0, "tool": "resize", "status": "ok", "size": {"width": 800, "height": 533}},
    {"step": 1, "tool": "contrast", "status": "ok", "size": {"width": 800, "height": 533}},
    {"step": 2, "tool": "sharpen", "status": "ok", "size": {"width": 800, "height": 533}},
    {"step": 3, "tool": "watermark", "status": "ok", "size": {"width": 800, "height": 533}},
    {"step": 4, "tool": "compress", "status": "ok", "size": {"width": 800, "height": 533}}
  ]
}

Generate Workflow (AI)

POST /api/v1/generate-workflow

Describe what you want in natural language, and AI generates a pipeline configuration you can execute with /api/v1/pipeline.

Request

curl -X POST https://launch.pics/api/v1/generate-workflow \
  -H "X-API-Key: lp_your_key" \
  -H "Content-Type: application/json" \
  -d '{"description": "Make it 800px wide, add a vintage film look, and compress as JPEG"}'

Response

{
  "description": "Make it 800px wide, add a vintage film look, and compress as JPEG",
  "steps": [
    {"tool": "resize", "params": {"width": 800}},
    {"tool": "sepia", "params": {"intensity": 0.6}},
    {"tool": "vignette", "params": {"strength": 0.4}},
    {"tool": "contrast", "params": {"factor": 0.9}},
    {"tool": "film-grain", "params": {"amount": 0.3}},
    {"tool": "compress", "params": {"quality": 85, "format": "JPEG"}}
  ],
  "step_count": 6
}
The response contains a steps array that can be passed directly to the /api/v1/pipeline endpoint along with your image.

Batch Processing

POST /api/v1/batch

Process up to 10 images with the same tool or pipeline in a single request.

Single tool on multiple images

curl -X POST https://launch.pics/api/v1/batch \
  -H "X-API-Key: lp_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "images": ["base64_image_1...", "base64_image_2...", "base64_image_3..."],
    "tool": "resize",
    "params": {"width": 400},
    "output_format": "WEBP",
    "quality": 80
  }'

Pipeline on multiple images

{
  "images": ["base64_1...", "base64_2..."],
  "steps": [
    {"tool": "resize", "params": {"width": 800}},
    {"tool": "sharpen", "params": {"amount": 1.5}},
    {"tool": "compress", "params": {"quality": 85, "format": "JPEG"}}
  ]
}

Response

{
  "results": [
    {"index": 0, "image_base64": "...", "size": {"width": 400, "height": 300}},
    {"index": 1, "image_base64": "...", "size": {"width": 400, "height": 267}},
    {"index": 2, "error": "Invalid image: cannot identify image file"}
  ],
  "processed": 2,
  "errors": 1,
  "format": "WEBP"
}

Key Usage

GET /api/v1/keys/usage

Check your API key usage statistics.

curl https://launch.pics/api/v1/keys/usage \
  -H "X-API-Key: lp_your_key"
{
  "name": "my-app",
  "requests": 1247,
  "rate_limit": "200/hour",
  "created": "2026-04-01T21:00:00Z",
  "last_used": "2026-04-01T22:30:00Z"
}

All Tools Reference

Every tool can be used as a standalone endpoint (/api/v1/{tool}) or as a step in a pipeline.

Image Manipulation

ToolDescriptionKey Params
resizeResize imagewidth, height, mode (contain|cover|stretch)
cropCrop to regionx, y, width, height
rotateRotate/flipangle, flip_h, flip_v
mirrorMirror imagedirection (horizontal|vertical)
circle-cropCrop to circlenone
borderAdd borderwidth, color (hex)

Color & Adjustment

ToolDescriptionKey Params
brightnessAdjust brightnessfactor (0.1-3.0, 1.0=original)
contrastAdjust contrastfactor (0.1-3.0)
saturationAdjust saturationfactor (0.0-3.0)
hue-shiftShift huedegrees (-180 to 180)
levelsInput/output levelsblack_point, white_point, gamma
color-adjustTemperature/tinttemperature, tint
color-replaceReplace a colorfrom_color, to_color, tolerance
grayscaleConvert to grayscalenone
invertInvert colorsnone

Effects & Filters

ToolDescriptionKey Params
blurGaussian blurradius (1-50)
sharpenSharpen imageamount (0.5-5.0)
sepiaSepia toneintensity (0.0-1.0)
vignetteEdge darkeningstrength (0.0-1.0)
film-grainFilm grain noiseamount (0.0-1.0)
pixelatePixelateblock_size (2-50)
posterizeReduce colorsbits (1-8)
thresholdB&W thresholdlevel (0-255)
edge-detectDetect edgesnone
embossEmboss effectnone
solarizeSolarizethreshold (0-255)
duotoneDuotone effectdark_color, light_color
halftoneHalftone dotsdot_size (4-20)
oil-paintOil paintingradius (2-8)
sketchPencil sketchnone
tilt-shiftMiniature effectblur, focus_position, focus_width
noiseAdd noiseamount, type (gaussian|salt_pepper)

Creative & AI

ToolDescriptionKey Params
memeMeme-style top/bottom texttop_text, bottom_text, font_size
og-imageOpen Graph image (1200x630)title, subtitle, title_font, overlay_opacity
gradient-textGradient-colored texttext, font, color_start, color_end, direction
badgeCorner badge/labeltext, position, bg_color, shape (pill|rect|circle)
vintageVintage/retro effectintensity (0.0-1.0)
collageGrid collage layoutcols, rows, spacing, bg_color
split-toneSplit toning colorsshadow_color, highlight_color, strength
color-gradeProfessional LGG gradinglift_r/g/b, gamma_r/g/b, gain_r/g/b
smart-resizeSmart center-crop resizewidth, height

SVG Tools

ToolDescriptionKey Params
svg-traceConvert bitmap to SVG vector artthreshold (0-255), color (hex), detail (low|normal|high), smoothness (0-1.5)
svg-to-pngRender SVG content to PNGsvg (raw SVG string), width, height, scale
svg-patternGenerate SVG pattern overlaypattern (dots|lines|grid|waves|diamonds|hexagons), size, color, opacity

Overlay & Compositing

ToolDescriptionKey Params
text-overlayFull text systemtext, font, font_size, color, position, align, shadow_color, bg_color, bg_radius, stroke_color, uppercase
watermarkText watermarktext, position, opacity, font_size
shadowDrop shadowoffset_x, offset_y, blur, color
transparencySet transparencyopacity, remove_color, tolerance

Format & Output

ToolDescriptionKey Params
convertConvert formatformat (PNG|JPEG|WEBP|GIF), quality
compressCompress/optimizequality (1-100), format (JPEG|WEBP)

Code Examples

Python

import requests, base64

API_KEY = "lp_your_key"
BASE = "https://launch.pics/api/v1"

# Read image and encode
with open("photo.jpg", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode()

# Single tool
r = requests.post(f"{BASE}/resize", json={
    "image_base64": img_b64,
    "width": 800,
    "mode": "contain"
}, headers={"X-API-Key": API_KEY})

result = r.json()
with open("resized.png", "wb") as f:
    f.write(base64.b64decode(result["image_base64"]))

# Pipeline
r = requests.post(f"{BASE}/pipeline", json={
    "image_base64": img_b64,
    "steps": [
        {"tool": "resize", "params": {"width": 800}},
        {"tool": "sepia", "params": {"intensity": 0.6}},
        {"tool": "vignette", "params": {"strength": 0.3}},
        {"tool": "compress", "params": {"quality": 85, "format": "JPEG"}}
    ]
}, headers={"X-API-Key": API_KEY})

JavaScript / Node.js

const fs = require('fs');

const API_KEY = 'lp_your_key';
const BASE = 'https://launch.pics/api/v1';

const imageBase64 = fs.readFileSync('photo.jpg').toString('base64');

// Single tool
const response = await fetch(`${BASE}/resize`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': API_KEY
  },
  body: JSON.stringify({
    image_base64: imageBase64,
    width: 800,
    mode: 'contain'
  })
});

const { image_base64, size } = await response.json();
fs.writeFileSync('resized.png', Buffer.from(image_base64, 'base64'));

// AI-generated workflow
const workflow = await fetch(`${BASE}/generate-workflow`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
  body: JSON.stringify({ description: 'Make it thumbnail-sized with a vintage look' })
}).then(r => r.json());

// Execute the generated workflow
const result = await fetch(`${BASE}/pipeline`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
  body: JSON.stringify({ image_base64: imageBase64, steps: workflow.steps })
}).then(r => r.json());

cURL

# Upload a file directly
curl -X POST https://launch.pics/api/v1/resize \
  -H "X-API-Key: lp_your_key" \
  -F "image=@photo.jpg" \
  -F "width=800" \
  -F "mode=contain"

# Get binary image back (pipe to file)
curl -X POST https://launch.pics/api/v1/grayscale \
  -H "X-API-Key: lp_your_key" \
  -H "Accept: image/png" \
  -F "image=@photo.jpg" \
  --output grayscale.png

Ready to start?

Contact andy@agentwire.email to get your API key.

More Free Tools

🖼️ Resize ✂️ Crop 🗜️ Compress 🎨 Filters 🔄 Rotate ↔️ Flip 🌑 Shadow 📝 Overlay 🖼️ Border ⭕ Round 📱 QR Code 👨‍💻 Dev Tools 🔍 Search API