Note
Need help? Join the Discord Server and get help with setup and usage.
An AI-powered media exploration application using Flask and Google Gemini.
I wanted to create a media exploration tool that combines the power of Google's Gemini AI with an intuitive interface. Existing solutions were either too complex or lacked the features I needed.
The main goal was to provide two ways to interact with Gemini AI:
- A web application for browser-based exploration
- A CLI for terminal-based workflows
Harper brings both together in a single, easy-to-use package.
- AI-powered search using Google Gemini models
- Image generation with Gemini 2.5 Flash Image
- Interactive TUI for terminal-based workflows
- Human verification flow (CAPTCHA-like)
- OpenAI compatible API endpoints
- Dual interfaces: Web (Flask) and CLI (Rust)
- Python 3.8+
- Node.js 16+
- npm
- Rust 1.75+ (for CLI)
# Clone the repository
git clone https://github.com/bniladridas/path.git
cd path
# Install dependencies
pip install -r requirements.txt
npm install
# Set up environment
cp .env.example .env
# Edit .env with your GEMINI_API_KEY
# Run the app
python run.pyOpen your browser and navigate to http://localhost:8000
# Build the Rust CLI
cd rust
cargo build --release
cp target/release/harper ~/.local/bin/harper
# Set up environment
cp .env.example .env
# Edit .env with your GEMINI_API_KEY# Web app - open http://localhost:8000
# CLI
harper tui # Interactive TUI
harper search "query" # Command line search
harper image --prompt "a sunset" # Generate imageharper-tui.mov
| Key | Action |
|---|---|
| Type | Start searching |
| Enter | Submit query |
| Esc | Clear or quit |
General: Overview | API Docs | Pricing
- Gemini 2.5 Flash
- Gemini 2.5 Flash Image
- Flask 3.1.2 - Web framework
- Google GenAI SDK - AI integration
- Gunicorn - WSGI server
- Playwright - E2E testing
- Vercel - Deployment
- Rust - Programming language
- Crossterm - Terminal UI
- Ratatui - TUI library
- Reqwest - HTTP client
Get your API key from Google AI Studio:
curl "https://generativelanguage.googleapis.com/v1beta/models?key=YOUR_API_KEY"This work is licensed under a Creative Commons Attribution 4.0 International License.
Note
If the Slack invite link expires, please fork the repository and submit a PR to update the invite link. Community contributions help keep the invite link working for everyone!
Contributions are welcome! Please feel free to submit a Pull Request.