212 lines
4.8 KiB
Markdown
212 lines
4.8 KiB
Markdown
# Banatie - Nano Banana Image Generation Service
|
|
|
|
A REST API service for AI-powered image generation using the Gemini Flash Image model. Banatie provides a simple HTTP interface for generating high-quality images from text prompts with optional reference images.
|
|
|
|
## 🚀 Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Node.js >= 18.0.0
|
|
- pnpm >= 8.0.0
|
|
- Gemini API key from [Google AI Studio](https://aistudio.google.com/)
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Clone the repository
|
|
git clone <repository-url>
|
|
cd banatie
|
|
|
|
# Install dependencies
|
|
pnpm install
|
|
|
|
# Setup environment variables
|
|
cp .env.example .env
|
|
# Edit .env with your Gemini API key
|
|
```
|
|
|
|
### Development
|
|
|
|
```bash
|
|
# Start development server with auto-reload
|
|
pnpm dev
|
|
|
|
# Start production server
|
|
pnpm start
|
|
|
|
# Build for production
|
|
pnpm build
|
|
```
|
|
|
|
## 📝 Environment Configuration
|
|
|
|
Copy `.env.example` to `.env` and configure:
|
|
|
|
```bash
|
|
# Required
|
|
GEMINI_API_KEY=your_gemini_api_key_here
|
|
|
|
# Optional (with defaults)
|
|
PORT=3000
|
|
NODE_ENV=development
|
|
CORS_ORIGIN=*
|
|
MAX_FILE_SIZE=5242880 # 5MB
|
|
MAX_FILES=3
|
|
RESULTS_DIR=./results
|
|
UPLOADS_DIR=./uploads/temp
|
|
LOG_LEVEL=info
|
|
```
|
|
|
|
## 🔌 API Endpoints
|
|
|
|
### Health Check
|
|
```
|
|
GET /health
|
|
```
|
|
Returns server status and uptime.
|
|
|
|
### API Information
|
|
```
|
|
GET /api/info
|
|
```
|
|
Returns API details and configuration.
|
|
|
|
### Generate Image
|
|
```
|
|
POST /api/generate
|
|
Content-Type: multipart/form-data
|
|
```
|
|
|
|
**Parameters:**
|
|
- `prompt` (string, required): Text description for image generation
|
|
- `filename` (string, optional): Custom filename for the generated image
|
|
- `referenceImages` (files, optional): Up to 3 reference images (5MB max each)
|
|
|
|
**Supported formats:** PNG, JPEG, JPG, WebP
|
|
|
|
## 📖 Usage Examples
|
|
|
|
### cURL
|
|
```bash
|
|
# Basic text-to-image
|
|
curl -X POST http://localhost:3000/api/generate \
|
|
-F "prompt=A magical forest with glowing mushrooms" \
|
|
-F "filename=magical_forest"
|
|
|
|
# With reference images
|
|
curl -X POST http://localhost:3000/api/generate \
|
|
-F "prompt=Character in medieval armor like the reference" \
|
|
-F "referenceImages=@./reference.jpg"
|
|
```
|
|
|
|
### JavaScript/Fetch
|
|
```javascript
|
|
const formData = new FormData();
|
|
formData.append('prompt', 'A futuristic cityscape at sunset');
|
|
formData.append('filename', 'futuristic_city');
|
|
|
|
const response = await fetch('http://localhost:3000/api/generate', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
const result = await response.json();
|
|
console.log(result);
|
|
```
|
|
|
|
### Response Format
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Image generated successfully",
|
|
"data": {
|
|
"filename": "generated_image_123.png",
|
|
"filepath": "./results/generated_image_123.png",
|
|
"description": "Generated image description",
|
|
"model": "gemini-2.0-flash-exp",
|
|
"generatedAt": "2024-01-01T12:00:00.000Z"
|
|
}
|
|
}
|
|
```
|
|
|
|
## 🛠️ Development Scripts
|
|
|
|
```bash
|
|
# Development
|
|
pnpm dev # Start with auto-reload
|
|
pnpm build # Build for production
|
|
pnpm start # Start production server
|
|
|
|
# Code Quality
|
|
pnpm typecheck # TypeScript type checking
|
|
pnpm lint # ESLint code linting
|
|
pnpm lint:fix # Fix ESLint issues
|
|
pnpm format # Format code with Prettier
|
|
pnpm format:check # Check code formatting
|
|
|
|
# Testing
|
|
pnpm test # Run tests
|
|
pnpm test:watch # Run tests in watch mode
|
|
pnpm test:coverage # Run tests with coverage
|
|
```
|
|
|
|
## 🏗️ Project Structure
|
|
|
|
```
|
|
banatie/
|
|
├── src/
|
|
│ ├── middleware/ # Express middleware
|
|
│ ├── routes/ # API route handlers
|
|
│ ├── services/ # Business logic services
|
|
│ ├── types/ # TypeScript type definitions
|
|
│ ├── utils/ # Utility functions
|
|
│ ├── app.ts # Express app configuration
|
|
│ └── server.ts # Server entry point
|
|
├── tests/ # Test files
|
|
├── results/ # Generated images output
|
|
├── uploads/ # Temporary file uploads
|
|
└── logs/ # Application logs
|
|
```
|
|
|
|
## 🔧 Configuration
|
|
|
|
### File Limits
|
|
- **Max file size**: 5MB per image (configurable)
|
|
- **Max files**: 3 reference images per request (configurable)
|
|
- **Request size**: 10MB total request limit
|
|
|
|
### Supported Image Formats
|
|
- PNG
|
|
- JPEG/JPG
|
|
- WebP
|
|
|
|
## 🚦 Error Handling
|
|
|
|
The API provides detailed error responses:
|
|
|
|
**Validation Errors (400):**
|
|
- Missing required parameters
|
|
- Invalid file formats
|
|
- File size exceeded
|
|
- Too many files
|
|
|
|
**Server Errors (500):**
|
|
- Missing API key configuration
|
|
- Image generation failures
|
|
- Internal processing errors
|
|
|
|
## 📄 License
|
|
|
|
MIT License - see LICENSE file for details.
|
|
|
|
## 🤝 Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Make your changes
|
|
4. Run tests and linting
|
|
5. Submit a pull request
|
|
|
|
## 📞 Support
|
|
|
|
For issues and questions, please open an issue on the GitHub repository. |