117 lines
2.5 KiB
Markdown
117 lines
2.5 KiB
Markdown
|
# Spectra
|
||
|
|
||
|
> A variation on the masonry grid image gallery with the row alighment constraint removed. Oh, it also has an admin interface so you can set it up and forget it.
|
||
|
|
||
|
## Features
|
||
|
|
||
|
- **Color Analysis**: Automatically extracts color palettes from images to create cohesive galleries
|
||
|
- **Smart Thumbnails**: Generates and caches responsive thumbnails in multiple sizes
|
||
|
- **EXIF Preservation**: Maintains all photo metadata through processing
|
||
|
- **Ownership Verification**: Embeds steganographic proofs in images
|
||
|
- **Live Configuration**: Hot-reload config changes without restarts
|
||
|
- **Production Ready**: Fully Dockerized with Traefik integration
|
||
|
|
||
|
## Quick Start
|
||
|
|
||
|
### Local Development
|
||
|
|
||
|
Clone the repository
|
||
|
|
||
|
```bash
|
||
|
git clone https://git.dws.rip/your-username/spectra
|
||
|
cd spectra
|
||
|
```
|
||
|
|
||
|
Set up Python virtual environment
|
||
|
|
||
|
```bash
|
||
|
python -m venv venv
|
||
|
source venv/bin/activate # or venv\Scripts\activate on Windows
|
||
|
```
|
||
|
|
||
|
Install dependencies
|
||
|
|
||
|
```bash
|
||
|
pip install -r requirements.txt
|
||
|
```
|
||
|
|
||
|
Create config from template
|
||
|
|
||
|
```bash
|
||
|
cp config.example.toml config.toml
|
||
|
```
|
||
|
|
||
|
Run development server
|
||
|
|
||
|
```bash
|
||
|
python app.py
|
||
|
```
|
||
|
|
||
|
### Production Deployment
|
||
|
|
||
|
Create required network
|
||
|
|
||
|
```bash
|
||
|
docker network create traefik-public
|
||
|
```
|
||
|
|
||
|
Configure your domain
|
||
|
```bash
|
||
|
sed -i 's/photos.dws.rip/your.domain.here/g' docker-compose.yml
|
||
|
```
|
||
|
|
||
|
Launch
|
||
|
|
||
|
```bash
|
||
|
docker-compose up -d
|
||
|
```
|
||
|
|
||
|
## Configuration
|
||
|
|
||
|
### Essential Settings
|
||
|
```toml
|
||
|
[server]
|
||
|
host = "0.0.0.0"
|
||
|
port = 5000
|
||
|
[security]
|
||
|
max_upload_size_mb = 80
|
||
|
rate_limit = 100 # requests per minute
|
||
|
[admin]
|
||
|
password = "change-this-password" # Required
|
||
|
```
|
||
|
|
||
|
See `config.example.toml` for all available options.
|
||
|
|
||
|
## Directory Structure
|
||
|
|
||
|
```
|
||
|
spectra/
|
||
|
├── app.py # Application entry point
|
||
|
├── config.py # Configuration management
|
||
|
├── models.py # Database models
|
||
|
├── steganography.py # Image verification
|
||
|
├── templates/ # Jinja2 templates
|
||
|
├── uploads/ # Original images
|
||
|
└── thumbnails/ # Generated thumbnails
|
||
|
```
|
||
|
|
||
|
## API Reference
|
||
|
|
||
|
### Endpoints
|
||
|
|
||
|
#### Public Endpoints
|
||
|
- `GET /` - Main gallery view
|
||
|
- `GET /api/images` - Get paginated image list
|
||
|
- `GET /verify/<filename>` - Verify image authenticity
|
||
|
|
||
|
#### Admin Endpoints
|
||
|
- `POST /admin/login` - Admin authentication
|
||
|
- `POST /admin/upload` - Upload new images
|
||
|
- `POST /admin/update_photo/<id>` - Update image metadata
|
||
|
- `POST /admin/delete_photo/<id>` - Delete image
|
||
|
|
||
|
## Environment Variables
|
||
|
|
||
|
- `FLASK_ENV`: Set to 'production' in production
|
||
|
- `WORKERS`: Number of Gunicorn workers (default: 4)
|
||
|
- `PORT`: Override default port (default: 5000)
|