Transform festival flyers into Spotify playlists with AI
FestList is a web application that uses AI-powered image analysis to extract artist names from festival flyers and automatically create Spotify playlists. Simply upload a festival poster, let our AI identify the artists, and generate a playlist to discover the music before the event!
- πΌοΈ AI-Powered Image Analysis - Upload festival flyers and let Google Gemini Vision AI extract artist names
- π― Smart Artist Detection - Advanced AI identifies artists with confidence scoring
- π΅ Automatic Playlist Creation - Generate Spotify playlists with top tracks from detected artists
- βοΈ Manual Editing - Review, add, or remove artists before creating your playlist
- π¨ Modern UI - Clean, responsive interface built with React and Material-UI
- π Secure Authentication - OAuth 2.0 integration with Spotify
- β‘ Fast Processing - Optimized backend with rate limiting and caching
- Python 3.9+
- Node.js 18+ and npm
- Docker & Docker Compose (optional, for containerized deployment)
- Tesseract OCR (for local development without Docker)
- Google Cloud Account (for Gemini AI API)
- Spotify Developer Account (for playlist creation)
-
Clone the repository
git clone https://github.com/yourusername/festlist.git cd festlist -
Set up environment variables
cp .env.example .env cp frontend/.env.example frontend/.env
-
Configure your
.envfile (see Configuration section) -
Start the application
docker-compose up --build
-
Access the application
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/docs
-
Clone the repository
git clone https://github.com/yourusername/festlist.git cd festlist -
Install Tesseract OCR
- Ubuntu/Debian:
sudo apt-get install tesseract-ocr - macOS:
brew install tesseract - Windows: Download from GitHub
- Ubuntu/Debian:
-
Set up the backend
cd backend python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt
-
Set up the frontend
cd frontend npm install -
Configure environment variables
cp .env.example .env cp frontend/.env.example frontend/.env # Edit both .env files with your credentials -
Start the backend
cd backend python start_server.py -
Start the frontend (in a new terminal)
cd frontend npm start
Create a .env file in the project root with the following variables:
# Google Cloud Configuration
GOOGLE_CLOUD_PROJECT_ID=your-project-id
GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account.json
GOOGLE_GEMINI_API_KEY=your-gemini-api-key
# Spotify Configuration
SPOTIFY_CLIENT_ID=your-spotify-client-id
SPOTIFY_CLIENT_SECRET=your-spotify-client-secret
SPOTIFY_REDIRECT_URI=http://localhost:3000/callback
# Application Configuration
BACKEND_URL=http://localhost:8000
FRONTEND_URL=http://localhost:3000
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=10485760 # 10MB
# OCR Configuration
OCR_ENGINE=tesseract # or google_vision
TESSERACT_PATH=/usr/bin/tesseract
# Development
DEBUG=true
LOG_LEVEL=INFO# Backend API URL
REACT_APP_BACKEND_URL=http://localhost:8000
# Development settings
HOST=localhost
PORT=3000
BROWSER=none- Go to Google AI Studio
- Create a new API key
- Add it to your
.envasGOOGLE_GEMINI_API_KEY
- Go to Spotify Developer Dashboard
- Create a new app
- Add
http://localhost:3000/callbackto Redirect URIs - Copy Client ID and Client Secret to your
.env
- Create a project in Google Cloud Console
- Enable Vision API
- Create a service account and download the JSON key
- Set
GOOGLE_APPLICATION_CREDENTIALSto the path of your JSON key
- Connect Spotify - Authenticate with your Spotify account
- Upload Flyer - Drag and drop or select a festival flyer image (JPEG, PNG, TIFF, BMP)
- Review Artists - AI extracts artist names; review and edit the list
- Create Playlist - Customize playlist settings and generate your Spotify playlist
- Enjoy - Listen to your new playlist on Spotify!
festlist/
βββ backend/ # FastAPI backend
β βββ app/
β β βββ api/ # API endpoints
β β βββ models/ # Pydantic models
β β βββ services/ # Business logic (OCR, AI, Spotify)
β β βββ utils/ # Utilities and middleware
β β βββ main.py # FastAPI application
β βββ tests/ # Backend tests
β βββ Dockerfile
β βββ requirements.txt
βββ frontend/ # React frontend
β βββ public/
β βββ src/
β β βββ components/ # React components
β β βββ services/ # API clients
β β βββ utils/ # Utilities
β βββ Dockerfile
β βββ package.json
βββ docker-compose.yml # Docker orchestration
βββ .env.example # Environment template
Backend:
- FastAPI - Modern Python web framework
- Google Gemini AI - Vision and text AI models
- Tesseract OCR - Text extraction from images
- Spotipy - Spotify API client
- Firebase/Firestore - User data and rate limiting
- Redis - Caching and session management
- Structlog - Structured logging
Frontend:
- React 19 - UI framework
- TypeScript - Type safety
- Material-UI - Component library
- Axios - HTTP client
- React Dropzone - File upload
cd backend
pytestcd frontend
npm testcd frontend
npm run buildThe build artifacts will be in frontend/build/.
The backend is production-ready with:
- Structured logging
- Rate limiting
- Security headers
- Error handling
- Request validation
docker-compose -f docker-compose.prod.yml up -d- Vercel/Netlify - Frontend (React build)
- Google Cloud Run - Backend (containerized)
- AWS ECS/Fargate - Full stack
- Heroku - Full stack
Update your .env with production URLs:
BACKEND_URL=https://api.yourdom ain.com
FRONTEND_URL=https://yourdom ain.com
SPOTIFY_REDIRECT_URI=https://yourdom ain.com/callback
DEBUG=falseWe welcome contributions! Please follow these guidelines:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Follow code style
- Python: Black formatter, Flake8 linter
- TypeScript: ESLint, Prettier
- Write tests for new features
- Commit your changes
git commit -m "Add amazing feature" - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request
Python:
# Format code
black backend/
# Lint code
flake8 backend/TypeScript:
# Lint code
cd frontend
npm run lint- Use clear, descriptive commit messages
- Start with a verb (Add, Fix, Update, Remove)
- Reference issues when applicable
- Provide a clear description of changes
- Include screenshots for UI changes
- Ensure all tests pass
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- Google Gemini AI for powerful vision and text AI
- Spotify Web API for music integration
- Tesseract OCR for text extraction
- FastAPI for the excellent Python framework
- Material-UI for beautiful React components
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: team@festlist.com
- Support for Apple Music and Amazon Music
- Multi-language support for international festivals
- Mobile app (iOS/Android)
- Collaborative playlists
- Festival discovery and recommendations
- Social sharing features
- Advanced playlist customization
Made with β€οΈ by the FestList Team