Files
portfolio/docs/ai-image-generation/ENVIRONMENT.md
2026-01-07 14:30:00 +01:00

311 lines
8.1 KiB
Markdown

# Environment Variables for AI Image Generation
This document lists all environment variables needed for the AI image generation system.
## Required Variables
Add these to your `.env.local` file:
```bash
# =============================================================================
# AI IMAGE GENERATION CONFIGURATION
# =============================================================================
# n8n Webhook Configuration
# The base URL where your n8n instance is running
N8N_WEBHOOK_URL=http://localhost:5678/webhook
# Secret token for authenticating webhook requests
# Generate a secure random token: openssl rand -hex 32
N8N_SECRET_TOKEN=your-secure-random-token-here
# Stable Diffusion API Configuration
# The URL where your Stable Diffusion WebUI is running
SD_API_URL=http://localhost:7860
# Optional: API key if your SD instance requires authentication
# SD_API_KEY=your-sd-api-key-here
# =============================================================================
# IMAGE GENERATION SETTINGS
# =============================================================================
# Automatically generate images when new projects are created
# Set to 'true' to enable, 'false' to disable
AUTO_GENERATE_IMAGES=true
# Directory where generated images will be saved
# Should be inside your public directory for web access
GENERATED_IMAGES_DIR=/app/public/generated-images
# Maximum time to wait for image generation (in milliseconds)
# Default: 180000 (3 minutes)
IMAGE_GENERATION_TIMEOUT=180000
# =============================================================================
# STABLE DIFFUSION SETTINGS (Optional - Overrides n8n workflow defaults)
# =============================================================================
# Default image dimensions
SD_DEFAULT_WIDTH=1024
SD_DEFAULT_HEIGHT=768
# Generation quality settings
SD_DEFAULT_STEPS=30
SD_DEFAULT_CFG_SCALE=7
# Sampler algorithm
# Options: "Euler a", "DPM++ 2M Karras", "DDIM", etc.
SD_DEFAULT_SAMPLER=DPM++ 2M Karras
# Default model checkpoint
# SD_DEFAULT_MODEL=sd_xl_base_1.0.safetensors
# =============================================================================
# FEATURE FLAGS (Optional)
# =============================================================================
# Enable/disable specific features
ENABLE_IMAGE_REGENERATION=true
ENABLE_BATCH_GENERATION=false
ENABLE_IMAGE_OPTIMIZATION=true
# =============================================================================
# LOGGING & MONITORING (Optional)
# =============================================================================
# Log all image generation requests
LOG_IMAGE_GENERATION=true
# Send notifications on generation success/failure
# DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
# SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
# =============================================================================
# ADVANCED SETTINGS (Optional)
# =============================================================================
# Custom prompt prefix for all generations
# SD_CUSTOM_PROMPT_PREFIX=professional tech illustration, modern design,
# Custom negative prompt suffix for all generations
# SD_CUSTOM_NEGATIVE_SUFFIX=low quality, blurry, pixelated, text, watermark
# Image file naming pattern
# Available variables: {projectId}, {timestamp}, {title}
IMAGE_FILENAME_PATTERN=project-{projectId}-{timestamp}.png
# Maximum concurrent image generation requests
MAX_CONCURRENT_GENERATIONS=2
# Retry failed generations
AUTO_RETRY_ON_FAILURE=true
MAX_RETRY_ATTEMPTS=3
```
## Production Environment
For production deployments, adjust these settings:
```bash
# Production n8n (if using cloud/dedicated instance)
N8N_WEBHOOK_URL=https://n8n.yourdomain.com/webhook
# Production Stable Diffusion (if using dedicated GPU server)
SD_API_URL=https://sd-api.yourdomain.com
# Production image storage (use absolute path)
GENERATED_IMAGES_DIR=/var/www/portfolio/public/generated-images
# Disable auto-generation in production (manual only)
AUTO_GENERATE_IMAGES=false
# Enable logging
LOG_IMAGE_GENERATION=true
# Set timeouts appropriately
IMAGE_GENERATION_TIMEOUT=300000
# Limit concurrent generations
MAX_CONCURRENT_GENERATIONS=1
```
## Docker Environment
If running in Docker, use these paths:
```bash
# Docker-specific paths
N8N_WEBHOOK_URL=http://n8n:5678/webhook
SD_API_URL=http://stable-diffusion:7860
GENERATED_IMAGES_DIR=/app/public/generated-images
```
Add to `docker-compose.yml`:
```yaml
services:
portfolio:
environment:
- N8N_WEBHOOK_URL=http://n8n:5678/webhook
- N8N_SECRET_TOKEN=${N8N_SECRET_TOKEN}
- SD_API_URL=http://stable-diffusion:7860
- AUTO_GENERATE_IMAGES=true
- GENERATED_IMAGES_DIR=/app/public/generated-images
volumes:
- ./public/generated-images:/app/public/generated-images
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
stable-diffusion:
image: your-sd-webui-image
ports:
- "7860:7860"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
```
## Cloud GPU Configuration
If using cloud GPU services (RunPod, vast.ai, etc.):
```bash
# Remote GPU URL with authentication
SD_API_URL=https://your-runpod-instance.com:7860
SD_API_KEY=your-api-key-here
# Longer timeout for network latency
IMAGE_GENERATION_TIMEOUT=300000
```
## Security Best Practices
1. **Never commit `.env.local` to version control**
```bash
# Add to .gitignore
echo ".env.local" >> .gitignore
```
2. **Generate secure tokens**
```bash
# Generate N8N_SECRET_TOKEN
openssl rand -hex 32
# Or using Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```
3. **Restrict API access**
- Use firewall rules to limit SD API access
- Enable authentication on n8n webhooks
- Use HTTPS in production
4. **Environment-specific files**
- `.env.local` - local development
- `.env.production` - production (server-side only)
- `.env.test` - testing environment
## Verifying Configuration
Test your environment variables:
```bash
# Check if variables are loaded
npm run dev
# In another terminal
node -e "
const envFile = require('fs').readFileSync('.env.local', 'utf8');
console.log('✓ .env.local exists');
console.log('✓ Variables found:', envFile.split('\\n').filter(l => l && !l.startsWith('#')).length);
"
# Test n8n connection
curl -f $N8N_WEBHOOK_URL/health || echo "n8n not reachable"
# Test SD API connection
curl -f $SD_API_URL/sdapi/v1/sd-models || echo "SD API not reachable"
```
## Troubleshooting
### Variables not loading
```bash
# Ensure .env.local is in the project root
ls -la .env.local
# Restart Next.js dev server
npm run dev
```
### Wrong paths in Docker
```bash
# Check volume mounts
docker-compose exec portfolio ls -la /app/public/generated-images
# Fix permissions
docker-compose exec portfolio chmod 755 /app/public/generated-images
```
### n8n webhook unreachable
```bash
# Check n8n is running
docker ps | grep n8n
# Check network connectivity
docker-compose exec portfolio ping n8n
# Verify webhook URL in n8n UI
```
## Example Complete Configuration
```bash
# .env.local - Complete working example
# Database (required for project data)
DATABASE_URL=postgresql://user:password@localhost:5432/portfolio
# NextAuth (if using authentication)
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-nextauth-secret
# AI Image Generation
N8N_WEBHOOK_URL=http://localhost:5678/webhook
N8N_SECRET_TOKEN=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
SD_API_URL=http://localhost:7860
AUTO_GENERATE_IMAGES=true
GENERATED_IMAGES_DIR=/Users/dennis/code/gitea/portfolio/public/generated-images
# Image settings
SD_DEFAULT_WIDTH=1024
SD_DEFAULT_HEIGHT=768
SD_DEFAULT_STEPS=30
SD_DEFAULT_CFG_SCALE=7
SD_DEFAULT_SAMPLER=DPM++ 2M Karras
# Optional features
ENABLE_IMAGE_REGENERATION=true
LOG_IMAGE_GENERATION=true
IMAGE_GENERATION_TIMEOUT=180000
MAX_CONCURRENT_GENERATIONS=2
```
---
**Note**: Always keep your `.env.local` file secure and never share tokens publicly!