# ============================================================================= # 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: local_gpu, mock, openai, stability, replicate, invokeai, comfyui # # local_gpu = FREE, runs on YOUR GPU — best option if you have an NVIDIA card # (use docker-compose.gpu.yml — models auto-download on first use) # mock = Free, returns original image unchanged (UI testing only) # openai = DALL-E 3 / gpt-image-1 (~$0.02-0.04/image) # stability = Stability AI SDXL (~$0.01/image) # replicate = Multiple models (~$0.002-0.03/image) # invokeai = Self-hosted InvokeAI running on another machine # comfyui = Self-hosted ComfyUI running on another machine # # GPU QUICK-START: # docker compose -f docker-compose.gpu.yml up --build # (AI_PROVIDER defaults to local_gpu in that compose file) # ============================================================================= AI_PROVIDER=replicate # ── Local GPU settings (only relevant when AI_PROVIDER=local_gpu) ──────────── # Auto-download HuggingFace models on first request (true/false) AUTO_DOWNLOAD_MODELS=true # Max diffusion pipelines to keep loaded in GPU memory (each is 2–7 GB) LOCAL_GPU_MAX_PIPELINES=2 # HuggingFace token — only needed for gated/private models #HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # Override auto-selected model for any operation (leave blank = auto by VRAM tier) #HF_MODEL_INPAINT=your-org/your-inpaint-model #HF_MODEL_TXT2IMG=your-org/your-txt2img-model #HF_MODEL_IMG2IMG=your-org/your-img2img-model # ───────────────────────────────────────────────────────────────────────────── # 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 # # =============================================================================