Natural Language Search Engine for Photo Library
Watch the Demo Video to see Pixa in action.
Pixa is a natural language search engine for your photo library, designed to make finding your cherished memories as effortless as a conversation. With Pixa, you can simply query your images using natural language, and it will return all relevant results.
This project was created during the HackFrost Hackathon using Kestra.
- Natural Language Search: Query your photos using conversational language.
- AI-Powered Tagging: Automatically generates descriptions for uploaded images using Geminiβs Vision models.
- Vector-Based Retrieval: Queries are embedded and matched with image embeddings for precise results.
- Efficient Storage: Images and metadata are stored securely in Supabase.
When you upload an image, Pixa follows these steps:
- Generate Descriptions:
- Uses Gemini's Vision models to describe the image.
- Example: "A group of friends celebrating a birthday party."
- Generate Embeddings:
- Converts the image description into vector embeddings using Geminiβs Embedding API.
- Store in Database:
- Saves the embeddings in a vector database hosted on Supabase.
- User inputs a natural language query (e.g., "Show me the birthday pic.").
- The query is vectorized using the same embedding API.
- It searches the vector database for relevant results and displays them to the user.
- Programming Language: Python/TypeScript
- Workflow Orchestration: Kestra
- Image Analysis: Gemini's Vision and Embedding APIs
- Database: Supabase (pgvector (Vector Database) + Storage)
- Deployment: Hosted on DigitalOcean (Kestra) & Vercel (Frontend)
- Python 3.8+, Node 18
- Kestra installed on your server
- Supabase account with a configured vector database
-
Clone the repository:
git clone https://github.com/kedaroo/codename-pixa.git cd pixa -
Install dependencies:
npm i
-
Configure environment variables:
- Create a .env file with your API keys and Supabase credentials.
-
Upload your images and start querying!
Watch the Demo Video to see Pixa in action.
Kestra orchestrates the entire image processing workflow in three steps:
- Run a Python script to generate image descriptions.
- Generate vector embeddings for these descriptions.
- Store the embeddings in the Supabase vector database.
Our Kestra instance is hosted on DigitalOcean and ensures a smooth and scalable image processing pipeline.
We welcome contributions! Feel free to:
- Report issues.
- Suggest new features.
- Submit pull requests.
-
Fork this repository.
-
Create a new branch:
git checkout -b feature-name
-
Commit your changes and open a pull request.
This project is licensed under the MIT License.
We hope Pixa transforms how you explore your photo library! π
