A simple API router for image generation models. This service acts as a proxy between your application and other image generation APIs, simplifying the process of using different models.
- OpenAI compatible API endpoint
- Rate limiting
- Free and paid model usage tracking
See API Reference
- Docker and Docker Compose
- API keys for the models you want to use
- Clone the repository
- Create a
.env
file and add your API keys - Follow instructions below to get Vertex API key
- Enable CORS for S3 image storage
Using Docker Compose:
docker compose up
The API will be available at http://localhost:4000
To run tests inside the Docker container:
# Run tests with console output visible
docker compose down && docker compose up -d
docker compose exec api npm test -- --verbose
docker compose -f docker-compose.generate.yml up
GET /health
Example curl command:
curl http://localhost:3000/health
- Rate limiting is enabled (100 requests per 15 minutes per IP)
- Security headers are implemented using Helmet
- CORS is enabled for cross-origin requests
- API key is required for image generation
Update: after the empty character streaming that I added to bypass Cloudflare timeouts, I'm not sure if this is still needed.
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
Create a public s3 bucket and update the .env.
- Add a new CNAME DNS record:
CNAME storage s3.provider.com
- Add CLoudflare transform rule:
Filter:
Hostname equals storage.imagerouter.io
# (http.host eq "storage.imagerouter.io")
Rewrite to Dynamic Redirectconcat("/file/BUCKET_NAME", http.request.uri.path)
- Allow CORS for storage:
Create a new HTTP Response Header Transform Rule:
Filter:
Hostname equals storage.imagerouter.io
# (http.host eq "storage.imagerouter.io")
Set static Access-Control-Allow-Origin *
To use Google Vertex AI models (Imagen for images and Veo for videos), you need:
Add these to your .env
file:
# Google Cloud Project ID (required)
GOOGLE_CLOUD_PROJECT_ID=your-project-id
# Google Cloud Region (optional, defaults to us-central1)
GOOGLE_CLOUD_LOCATION=us-central1
# Service Account Key (required) - base64 encoded JSON
GOOGLE_SERVICE_ACCOUNT_KEY=ewogICJ0eXBlIjogInNlcnZpY2VfYWNjb3VudCIsC...
- Go to Google Cloud Console
- Create or select a project
- Enable the "Vertex AI API"
- Go to "IAM & Admin" > "Service Accounts"
- Create a new service account with "Vertex AI User" role
- Create a JSON key for this service account
- Convert the JSON to base64:
cat service-account.json | base64 -w 0
- Put the base64 string in
GOOGLE_SERVICE_ACCOUNT_KEY