Skip to main content

Lightweight image gallery server - no database, no files left behind

Project description

Lenslet

A lightweight image gallery server for fast visual triage. Point it at a directory or a Parquet table and browse instantly in your browser. Lenslet keeps the source images read-only and stores workspace state separately.

Introduction

image image

Lenslet is a self-contained image gallery server designed for simplicity and speed. It indexes directories on-the-fly, generates thumbnails on demand, and serves everything through a clean web interface. Perfect for quickly browsing local image collections or large Parquet-backed datasets without modifying the source images.

Features

  • Workspace-aware: Persists UI state (Smart Folders/views) and optional thumbnail cache under .lenslet/ (or <parquet>.lenslet.json)
  • Read-only sources: Never writes into your image directories or S3 buckets
  • Local + S3 + HTTP: Mix local files, s3:// URIs, and URLs with smart source parsing
  • Metrics & filtering: Sort/filter by numeric metrics from Parquet (histograms + range brushing)
  • Labels & export: Tag, rate, and annotate items, then export metadata as JSON or CSV
  • Single command: Just point to a directory or Parquet file and go

Installation

pip install lenslet

Usage

Command Line Interface

lenslet /path/to/images

Then open the URL printed in the terminal (default http://127.0.0.1:7070, or the next available port).

Options:

lenslet <directory|table.parquet> [options]

Options:
  -p, --port PORT              Port to listen on (default: 7070; auto-increment if in use)
  -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)
  --source-column NAME         Column to load image paths from in table mode
  --base-dir PATH              Base directory for resolving relative paths in table mode
  --cache-wh / --no-cache-wh   Cache width/height back into parquet (default: on)
  --skip-indexing / --no-skip-indexing
                               Skip probing image dimensions during table load (default: on)
  --thumb-cache / --no-thumb-cache
                               Cache thumbnails on disk when a workspace is available (default: on)
  --no-write                   Disable workspace writes (.lenslet/) for one-off sessions
  --reload                     Enable auto-reload for development
  --share                      Create a public share URL via cloudflared
  --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

# Create a public share URL (prints a trycloudflare.com link)
lenslet ~/Images --share

# Start from a Parquet workspace (paths can be local, s3://, or https://)
lenslet /data/items.parquet --source-column image_path --base-dir /data

# Start from a folder containing items.parquet
lenslet /data/dataset --source-column image_path

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
        "https://example.com/img4.jpg",   # HTTP/HTTPS URLs
    ],
}

# 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, S3 URIs, and HTTP URLs

See Programmatic API Documentation for details and examples.

Notes

  • Workspace files: .lenslet/views.json stores Smart Folders; optional thumbnail cache lives under .lenslet/thumbs/
    • For Parquet, views live at <table>.lenslet.json and thumbs at <table>.cache/thumbs/
  • Read-only sources: The server never writes into your image directories or S3 buckets
  • Labels: Tags/notes/ratings are editable in the UI (session-only) and exportable as JSON/CSV
  • No-write mode: Pass --no-write to keep the session fully ephemeral (no .lenslet/ or .lenslet.json)
  • Formats: Supports JPEG, PNG, and WebP
  • Hidden files: Files/folders starting with . are ignored

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lenslet-0.2.6.tar.gz (494.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lenslet-0.2.6-py3-none-any.whl (156.3 kB view details)

Uploaded Python 3

File details

Details for the file lenslet-0.2.6.tar.gz.

File metadata

  • Download URL: lenslet-0.2.6.tar.gz
  • Upload date:
  • Size: 494.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.16

File hashes

Hashes for lenslet-0.2.6.tar.gz
Algorithm Hash digest
SHA256 baca741c30ce6e3b8aeb5bf610d38102a1c06d2d059c415e0a425f60a70cc17b
MD5 de71a02400d44294903875e698524f3d
BLAKE2b-256 bc27c0bfc144b6283f3dfec8acb14857bee6635a9e56a625d00341c4c36560fb

See more details on using hashes here.

File details

Details for the file lenslet-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: lenslet-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 156.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.16

File hashes

Hashes for lenslet-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 abf9a723ee6c144bea42eb74a2d533d7ef5e624a39d1db518fbad965c1e9d31e
MD5 65071b6341eec2b681d1489914d81c93
BLAKE2b-256 791d61e900ee30bb0da32d8bcab72e286496352c9ab9c8c42642234f0ce91c16

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page