version: "3.8" services: fade-out: build: context: . target: runtime container_name: fade-out-dev restart: "no" ports: - "8500:8000" volumes: # Mount backend source for live reload - ./backend:/app/backend # Mount frontend build output (built by vite dev or separate build) - ./frontend/dist:/app/frontend/dist # Local watch directories for development. Audio + video are read-write # so the optional source-file renaming feature can be exercised locally; # see the note in docker-compose.yml. - ./dev/watch/audio:/watch/audio:rw - ./dev/watch/video:/watch/video:rw - ./dev/watch/djctl-cue:/watch/djctl-cue:ro # Local output directories - ./dev/output/thumbnails:/output/thumbnails - ./dev/output/cover-art:/output/cover-art # Persistent data - ./data:/data environment: - TZ=${TZ:-UTC} - OPENAI_API_KEY=${OPENAI_API_KEY} - FAL_API_KEY=${FAL_API_KEY} - SOUNDCLOUD_EMAIL=${SOUNDCLOUD_EMAIL} - SOUNDCLOUD_PASSWORD=${SOUNDCLOUD_PASSWORD} - YOUTUBE_CLIENT_ID=${YOUTUBE_CLIENT_ID} - YOUTUBE_CLIENT_SECRET=${YOUTUBE_CLIENT_SECRET} - YOUTUBE_REFRESH_TOKEN=${YOUTUBE_REFRESH_TOKEN} - NOTIFICATION_DISCORD_WEBHOOK_URL=${NOTIFICATION_DISCORD_WEBHOOK_URL} - GITHUB_TOKEN=${GITHUB_TOKEN:-} - DEBUG=1 command: ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] frontend: image: node:20-alpine container_name: fade-out-frontend-dev restart: "no" working_dir: /app/frontend ports: - "5173:5173" volumes: - ./frontend:/app/frontend command: ["sh", "-c", "npm install && npm run dev -- --host 0.0.0.0"] environment: - VITE_API_URL=http://localhost:8500