Each operation (inpaint, txt2img, img2img, outpaint) can now use a different provider. Resolution order: per-op override → global AI_PROVIDER default. Example: txt2img→openai, inpaint→invokeai, everything else→invokeai default. Backend: - config.py: add AI_PROVIDER_INPAINT / TXT2IMG / IMG2IMG / OUTPAINT settings - remote_provider.py: get_remote_provider(operation) resolves override then default; _build_provider() extracted as shared factory; _OP_FIELD maps op→setting name - ai_tools.py: each endpoint passes its operation to _require_remote(); GET /api/config runs per-op health checks concurrently, returns operations map and overrides; POST /api/config accepts and applies per-op override fields Frontend: - ai_provider_settings.js: four new selects (inpaint/txt2img/img2img/outpaint); persists to localStorage and sends per-op fields to POST /api/config - provider-badge.js: shows override summary (e.g. "invokeai · txt2img→openai") and per-op health in tooltip - .env.example: document per-op override env vars with examples https://claude.ai/code/session_01B58MaJCU1R6KwBDJCp8AfN
178 lines
10 KiB
Bash
178 lines
10 KiB
Bash
# =============================================================================
|
|
# AI Photo Edit - Environment Configuration
|
|
# =============================================================================
|
|
#
|
|
# SETUP INSTRUCTIONS:
|
|
# 1. Copy this file to .env: cp .env.example .env
|
|
# 2. Get API key from Replicate (see below)
|
|
# 3. Paste your key in the REPLICATE_API_KEY line
|
|
# 4. Rebuild: docker-compose up -d --build
|
|
#
|
|
# =============================================================================
|
|
|
|
|
|
# =============================================================================
|
|
# STEP 1: Choose AI Provider
|
|
# =============================================================================
|
|
# Options: mock, openai, stability, replicate
|
|
#
|
|
# mock = Free, but returns original image unchanged (for testing UI)
|
|
# openai = DALL-E 2 inpainting (~$0.02/image) - lower quality
|
|
# stability = Stability AI SDXL (~$0.01/image) - good quality
|
|
# replicate = Multiple models (~$0.002-0.03/image) - RECOMMENDED
|
|
#
|
|
# RECOMMENDED: Use "replicate" for best quality and model variety
|
|
# =============================================================================
|
|
|
|
AI_PROVIDER=replicate
|
|
|
|
# Per-operation provider overrides (optional — blank means use AI_PROVIDER above)
|
|
# Example: use OpenAI for text-to-image (best quality) but InvokeAI for everything else
|
|
#AI_PROVIDER_TXT2IMG=openai
|
|
#AI_PROVIDER_INPAINT=invokeai
|
|
#AI_PROVIDER_IMG2IMG=invokeai
|
|
#AI_PROVIDER_OUTPAINT=invokeai
|
|
|
|
|
|
# =============================================================================
|
|
# STEP 2: Get Your API Key
|
|
# =============================================================================
|
|
#
|
|
# ╔═══════════════════════════════════════════════════════════════════════════╗
|
|
# ║ REPLICATE (RECOMMENDED) ║
|
|
# ╠═══════════════════════════════════════════════════════════════════════════╣
|
|
# ║ ║
|
|
# ║ 1. Go to: https://replicate.com ║
|
|
# ║ 2. Click "Sign in" (use GitHub, Google, or email) ║
|
|
# ║ 3. Go to: https://replicate.com/account/api-tokens ║
|
|
# ║ 4. Click "Create token" ║
|
|
# ║ 5. Copy the token (starts with "r8_") ║
|
|
# ║ 6. Paste it below after REPLICATE_API_KEY= ║
|
|
# ║ ║
|
|
# ║ FREE TIER: New accounts get some free credits to try models! ║
|
|
# ║ PRICING: ~$0.002-0.03 per image depending on model ║
|
|
# ║ ║
|
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
|
|
REPLICATE_API_KEY=r8_PASTE_YOUR_KEY_HERE
|
|
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
# OPENAI (cloud, dall-e-3 / gpt-image-1)
|
|
# Get key at: https://platform.openai.com/api-keys
|
|
# AI_PROVIDER=openai
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
#OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
#OPENAI_MODEL=dall-e-3
|
|
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
# INVOKEAI (self-hosted, best for Flux/SDXL)
|
|
# Run InvokeAI on your local machine or NAS, point URL here.
|
|
# AI_PROVIDER=invokeai
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
#INVOKEAI_URL=http://192.168.1.x:9090
|
|
#INVOKEAI_DEFAULT_MODEL=flux-dev
|
|
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
# COMFYUI (self-hosted, workflow JSON API)
|
|
# AI_PROVIDER=comfyui
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
#COMFYUI_URL=http://192.168.1.x:8188
|
|
#COMFYUI_DEFAULT_MODEL=v1-5-pruned-emaonly.ckpt
|
|
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
# STABILITY AI (Alternative)
|
|
# Get key at: https://platform.stability.ai/account/keys
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
#STABILITY_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
|
|
|
# =============================================================================
|
|
# STEP 3: Model Selection (OPTIONAL - for advanced users)
|
|
# =============================================================================
|
|
#
|
|
# By default, the system AUTO-SELECTS the best model based on your prompt:
|
|
# - Prompt contains "remove/erase/delete" → Uses LaMa (fast removal)
|
|
# - Prompt contains "face/hands/person" → Uses Realistic Vision
|
|
# - Everything else → Uses SDXL Inpaint
|
|
#
|
|
# To FORCE a specific model, uncomment ONE line below:
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
|
|
# REPLICATE_MODEL=sdxl-inpaint # General purpose, good quality (~$0.01)
|
|
# REPLICATE_MODEL=lama # Object removal ONLY (~$0.002, fastest)
|
|
# REPLICATE_MODEL=realistic-vision # Faces, hands, skin (~$0.02)
|
|
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
# IMPORTANT: About Flux and other text-to-image models
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
#
|
|
# Models like "black-forest-labs/flux-kontext-pro" are TEXT-TO-IMAGE models.
|
|
# They generate NEW images from text, they DON'T edit existing images.
|
|
#
|
|
# For EDITING (inpainting), you need models that accept:
|
|
# - An existing image
|
|
# - A mask showing what to change
|
|
# - A prompt describing the change
|
|
#
|
|
# WORKS for editing: DOESN'T work for editing:
|
|
# ✓ sdxl-inpaint ✗ flux-kontext-pro (text-to-image)
|
|
# ✓ lama ✗ flux-dev (text-to-image)
|
|
# ✓ realistic-vision ✗ ideogram (text-to-image)
|
|
#
|
|
# ───────────────────────────────────────────────────────────────────────────
|
|
|
|
# Stability AI model selection (if using AI_PROVIDER=stability)
|
|
#STABILITY_MODEL=sdxl # Options: sdxl, sd15, sd21
|
|
|
|
|
|
# =============================================================================
|
|
# SECURITY (Change this in production!)
|
|
# =============================================================================
|
|
|
|
SECRET_KEY=change-this-to-a-long-random-string-in-production
|
|
|
|
|
|
# =============================================================================
|
|
# ADVANCED SETTINGS (Usually don't need to change)
|
|
# =============================================================================
|
|
|
|
# CORS origins (comma-separated)
|
|
CORS_ORIGINS=http://localhost:5173,http://localhost:3000,http://localhost:3080,http://localhost
|
|
|
|
# Database path
|
|
DATABASE_URL=sqlite:///./data/ai_photo_edit.db
|
|
|
|
# Auto-download SAM model on startup (true/false)
|
|
# When true (default): Downloads SAM model (~375MB) on first startup for offline Smart Select
|
|
# When false: Skips download, Smart Select uses Replicate API (requires REPLICATE_API_KEY)
|
|
AUTO_DOWNLOAD_SAM=true
|
|
|
|
# Allow users to select model per-edit
|
|
ALLOW_MODEL_OVERRIDE=true
|
|
|
|
|
|
# =============================================================================
|
|
# TROUBLESHOOTING
|
|
# =============================================================================
|
|
#
|
|
# PROBLEM: "405 Method Not Allowed" errors
|
|
# FIX: Rebuild container: docker-compose build --no-cache && docker-compose up -d
|
|
#
|
|
# PROBLEM: "REPLICATE_API_KEY not configured"
|
|
# FIX: 1. Make sure .env file exists (not just .env.example)
|
|
# 2. Make sure REPLICATE_API_KEY has your actual key
|
|
# 3. Restart: docker-compose down && docker-compose up -d
|
|
#
|
|
# PROBLEM: Edits don't change the image
|
|
# FIX: Check AI_PROVIDER isn't set to "mock"
|
|
#
|
|
# PROBLEM: "rembg not installed"
|
|
# FIX: Rebuild: docker-compose build --no-cache backend
|
|
#
|
|
# PROBLEM: Smart Select uses flood-fill instead of AI
|
|
# FIX: Smart Select needs REPLICATE_API_KEY for SAM model
|
|
#
|
|
# CHECK LOGS: docker-compose logs -f backend
|
|
#
|
|
# =============================================================================
|