Lightweight image gallery server - no database, no files left behind
Project description
Lenslet
A lightweight image gallery server that runs entirely in-memory. Point it at a directory of images and browse them in your browser. No database, no metadata files left behind.
Introduction
Lenslet is a self-contained image gallery server designed for simplicity and speed. It indexes directories on-the-fly, generates thumbnails in memory, and serves everything through a clean web interface. Perfect for quickly browsing local image collections without modifying the source directory.
Features
- Clean operation: No files written to your image directories
- In-memory indexing: Fast directory scanning and caching
- On-demand thumbnails: Generated and cached in RAM
- Full web UI: Browse, search, and view images in your browser
- Metadata support: Add tags, notes, and ratings (session-only)
- Single command: Just point to a directory and go
Installation
pip install lenslet
Usage
Command Line Interface
lenslet /path/to/images
Then open http://127.0.0.1:7070 in your browser.
Options:
lenslet <directory> [options]
Options:
-p, --port PORT Port to listen on (default: 7070)
-H, --host HOST Host to bind to (default: 127.0.0.1)
--thumb-size SIZE Thumbnail short edge in pixels (default: 256)
--thumb-quality QUALITY Thumbnail WebP quality 1-100 (default: 70)
--reload Enable auto-reload for development
--verbose Show detailed server logs
-v, --version Show version and exit
Examples:
# Serve images from your Pictures folder
lenslet ~/Pictures
# Use a custom port
lenslet ~/Photos --port 8080
# Make accessible on local network
lenslet ~/Images --host 0.0.0.0 --port 7070
Programmatic API (Python/Jupyter)
Launch lenslet directly from Python code or notebooks:
import lenslet
datasets = {
"my_images": ["/path/to/img1.jpg", "/path/to/img2.jpg"],
"more_images": ["s3://bucket/img3.jpg"], # S3 URIs supported!
}
# Launch in non-blocking mode (returns immediately)
lenslet.launch(datasets, blocking=False, port=7070)
Key Features:
- 🚀 Jupyter-friendly: Non-blocking mode for notebooks
- ☁️ S3 support: Automatically handles S3 URIs via presigned URLs
- 📁 Multiple datasets: Organize images into named collections
- 🔗 Mixed sources: Combine local files and S3 images
See Programmatic API Documentation for details and examples.
Notes
- All indexes, thumbnails, and metadata are kept in memory
- Metadata changes (tags, ratings, notes) are lost when the server stops
- Supports JPEG, PNG, and WebP formats
- Hidden files and folders (starting with
.) are ignored
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lenslet-0.1.5.tar.gz.
File metadata
- Download URL: lenslet-0.1.5.tar.gz
- Upload date:
- Size: 389.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3b5718575e305f98c7e3620555d36f1f43bc098fd45566110dea4fc17e7de0f
|
|
| MD5 |
f02695697554d28caf061a5fd0c2fd82
|
|
| BLAKE2b-256 |
438ea10b9061c7138d08f7a5935d16c12fa991ec8d4526d77170c7fc6aacd807
|
File details
Details for the file lenslet-0.1.5-py3-none-any.whl.
File metadata
- Download URL: lenslet-0.1.5-py3-none-any.whl
- Upload date:
- Size: 109.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84b615ba980e78ca2a574407b45f5156ded53199e613a63777cedecf412dfb9f
|
|
| MD5 |
8c7a5c6d5a9336bba9c163fb083ca06d
|
|
| BLAKE2b-256 |
d6bbef7ce5449f503367f6625f88c53bcea0197319222315add85740a91a3421
|