Overview
Discover what makes Pellicola powerful
Pellicola is a lightweight, self‑hosted PHP gallery that turns any directory of images into an instantly accessible web album. Its core philosophy is **zero‑configuration**: a single PHP file, a handful of optional constants in `config.php`, and the web server’s document root are all that is required. The application parses the file system, extracts EXIF metadata with PHP’s native `exif_read_data`, and renders responsive HTML on the fly. This makes Pellicola ideal for static hosting environments or small personal servers where minimal maintenance is paramount.
Language & Runtime
Web Server
Libraries
Data Layer
Overview
Pellicola is a lightweight, self‑hosted PHP gallery that turns any directory of images into an instantly accessible web album. Its core philosophy is zero‑configuration: a single PHP file, a handful of optional constants in config.php, and the web server’s document root are all that is required. The application parses the file system, extracts EXIF metadata with PHP’s native exif_read_data, and renders responsive HTML on the fly. This makes Pellicola ideal for static hosting environments or small personal servers where minimal maintenance is paramount.
Technical Stack
- Language & Runtime: PHP 7+ (tested up to 8.3). The codebase is procedural with a few helper classes for configuration and pagination, ensuring low overhead.
- Web Server: Compatible with any Apache or lighttpd instance; Nginx can be used with
try_filesto proxy static assets. - Libraries: Requires the PHP GD extension for thumbnail generation and EXIF support for metadata extraction. No external composer dependencies are shipped, keeping the binary footprint tiny.
- Data Layer: None. Pellicola is file‑system first: images, optional
.txtdescription files, and apreamble.htmlper album drive the entire data model. A simple SQLite database is optionally used for statistics if enabled, but this is entirely optional.
Core Capabilities
- Dynamic Album Discovery: Any subdirectory under the configured photo root becomes an album. The directory structure is mirrored in the URL hierarchy.
- Metadata Extraction: Aperture, focal length, shutter speed, ISO, and GPS coordinates are read from EXIF. The app can display a map (OpenStreetMap) if
$SHOW_MAPis enabled. - Internationalization: Text strings are stored in language‑specific
.inifiles; the app auto‑detects browser language and falls back gracefully. - Download & RAW Support: When enabled, each JPEG can have an associated RAW file (e.g.,
.CR2,.NEF) that is automatically linked for download. - RSS Feed & Statistics: Generates an RSS feed of new images and aggregates basic statistics (camera models, disk usage) on the fly.
- Accessibility: Implements HTML5
accesskeyattributes for common actions and ensures responsive design via CSS media queries.
Deployment & Infrastructure
Pellicola is intentionally minimalistic, making it a perfect fit for containerized environments. A typical Dockerfile would expose port 80 and mount the photo directory into /var/www/html/photos. Because it relies only on PHP’s built‑in extensions, the image size stays below 30 MB. For scaling beyond a single node, a shared NFS or cloud storage backend can be mounted to the photo root; Pellicola will automatically enumerate albums across the shared filesystem without any configuration changes.
Integration & Extensibility
While Pellicola does not expose a REST API, its design allows developers to hook into the rendering pipeline by overriding template files or extending the config.php constants. For advanced workflows, developers can:
- Embed Pellicola’s gallery in an existing PHP application by including the main script and passing a custom
$photoRoot. - Hook into the
onImageLoadcallback to trigger side‑effects (e.g., logging, analytics). - Extend the RSS feed by adding custom namespaces or additional metadata fields.
Webhooks are not natively supported, but the lightweight nature of the codebase makes it straightforward to add a POST endpoint that triggers a gallery refresh or updates a static index.
Developer Experience
The codebase is intentionally small (≈ 2 k lines), with clear separation of concerns: configuration, image processing, and HTML rendering. The README provides exhaustive feature descriptions, and the config.php file is self‑documented with comments. Community support is modest but active; issues and pull requests are typically addressed within a day on GitHub. The lack of external dependencies means there is no vendor lock‑in or complex CI pipelines—developers can copy the repository and run it on any LAMP stack instantly.
Use Cases
| Scenario | Why Pellicola Fits |
|---|---|
| Personal photo backup | No database, instant publish from a USB drive or cloud sync folder. |
| Small business portfolio | Quick setup, responsive design, optional RAW downloads for clients. |
| Event photography | Automatic RSS feed and statistics aid in tracking shoot metrics; GPS maps show venues. |
| Developer showcase | Lightweight, easy to embed in a static site; serves as a demo for file‑system based APIs. |
| IoT camera output | Cameras can dump images into a shared directory; Pellicola auto‑publishes without extra code. |
Advantages Over Alternatives
- Zero Dependency: No composer packages, no Node.js build step—ideal for low‑resource environments.
- File‑System First: Eliminates database migrations, making rollbacks trivial and deployment painless.
- GD‑Based Thumbnails: Generates thumbnails on demand without external image libraries, keeping the binary small.
- GDPR‑Compliant: No tracking or analytics; user data stays on the server.
- Open Source & MIT Licensed: No commercial restrictions, perfect for internal tools or public galleries.
In summary, Pellicola offers a developer‑friendly, drop‑in solution for photo publishing that balances minimalism with feature richness. Its architecture encourages rapid iteration, easy hosting on any PHP‑enabled web server, and straightforward integration into larger PHP ecosystems
Open SourceReady to get started?
Join the community and start self-hosting Pellicola today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Explore More Apps
asciinema
Record and share terminal sessions the lightweight way
Weblate
Open-source continuous localization platform
Traccar
Open‑source GPS tracking platform for real‑time vehicle monitoring
TrailBase
Fast, single‑file Firebase alternative built on Rust
Tracim
Collaborative workspace for teams
slskd
Secure, web‑based Soulseek client for self‑hosted file sharing