# =============================================================================
# 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    = gpt-image-2 generation + edits (~$0.006-0.21/image, see below)
#   stability = NOT IMPLEMENTED YET — config field exists but no driver in
#               remote_provider.py; setting this breaks every AI call
#   replicate = NOT IMPLEMENTED YET — same as above (Replicate IS used for
#               Smart Select's SAM fallback, but that's a separate code path)
#   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 — but only if this
#   var is unset/blank; since AI_PROVIDER=local_gpu is set explicitly below,
#   that's what you get either way)
# =============================================================================

AI_PROVIDER=local_gpu

# ── 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)
# On 4-6GB cards (Quadro P2200, GTX 1060/1660, etc.) the auto-tier picks either
# slow SDXL+CPU-offload or a generic (not hand/face-tuned) SD checkpoint.
# Lykon/dreamshaper-8-inpainting is SD1.5-based (1.7GB, fast, no offload needed)
# and noticeably better on hands/faces — worth forcing on small cards:
#HF_MODEL_INPAINT=Lykon/dreamshaper-8-inpainting
#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, gpt-image-2)
# Get key at: https://platform.openai.com/api-keys
# AI_PROVIDER=openai
# ───────────────────────────────────────────────────────────────────────────
# dall-e-2 and dall-e-3 were retired May 12, 2026; gpt-image-1 deprecates
# Oct 23, 2026. gpt-image-2 is the current model and handles both
# generation and masked edits (inpaint/img2img/outpaint) — no org
# verification step needed, unlike gpt-image-1.
# Pricing (1024x1024): ~$0.006 low / $0.053 medium / $0.211 high quality.
#OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#OPENAI_MODEL=gpt-image-2
# Model for inpaint/img2img/outpaint (the /v1/images/edits endpoint).
#OPENAI_EDIT_MODEL=gpt-image-2

# ───────────────────────────────────────────────────────────────────────────
# 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

# Auto-download U2Net model on startup (true/false)
# When true (default): Downloads U2Net model (~176MB) on first startup for offline Remove Background
# When false: Skips download, Remove Background falls back to rembg (if installed)
AUTO_DOWNLOAD_U2NET=true

# Background removal model (Remove Background tool) — used when request.model="auto"
# Options: ben2 (default — best for clean cutouts, hair/edges), birefnet-hr
# (best for high-res/print work, slower), u2net (lightweight, always-on fallback)
# ben2 and birefnet-hr download weights from HuggingFace on first use (GPU image only).
BG_REMOVAL_MODEL=ben2

# 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
#
# =============================================================================
