Mejiro
Mejiro is a PHP-based application that provides easy-to-use instant photo publishing.
Self-hosted photo publishing, honestly reviewed. No marketing fluff, just what you get when you drop a PHP app on your server.
TL;DR
- What it is: A lightweight, no-database PHP web app for publishing photo galleries on your own server — think “Pastebin for your photos,” but with EXIF display, maps, RSS feeds, and multi-language support [1].
- Who it’s for: Photographers, hobbyists, and anyone who wants a dead-simple way to share photo albums without uploading to Instagram, Google Photos, or Flickr. No tracking, no accounts, no vendor.
- Cost: The software is GPL-3.0 — free. You pay for a web host with PHP support. A shared hosting plan at $3–5/mo or a VPS at $5–6/mo is all it takes [1].
- Key strength: Zero installation friction — no database, no npm, no composer. Drop files in a directory, point your browser, done. EXIF data display and OpenStreetMap integration are genuinely useful for photographers sharing travel or street work [1].
- Key weakness: 186 GitHub stars after what appears to be years of development signals a small community, which means thin third-party documentation, no commercial support path, and limited ecosystem. It’s a one-person project, not a platform [1].
What is Mejiro
Mejiro (hosted on GitHub as Pellicola, Italian for “film”) is a PHP web application that turns a directory of JPEG files into a browsable photo gallery. The pitch in its own GitHub description: “Pastebin for your photos” [1]. That’s accurate. You put photos in a folder, the app reads them, and visitors get a paginated gallery with search, EXIF metadata, and optional map integration.
What makes it distinct from other self-hosted galleries is the deliberate absence of complexity. No MySQL, no PostgreSQL, no Redis. No Node.js build step. No Docker required (though a container path exists). If your server has PHP 7 or later with GD and EXIF libraries — which most shared hosts do by default — Pellicola runs. The only “installation” is cloning the repo or extracting a ZIP into your web root and editing a single config.php file [1].
The project sits at 186 GitHub stars [merged profile]. For comparison, PhotoPrism has 35,000+, Lychee has 3,400+, and Piwigo has 3,200+. Mejiro/Pellicola is firmly in the “small tool made by one person who solved their own problem” tier — which is not automatically bad, but it shapes what you should expect.
There are no third-party reviews of this tool in circulation. The sources surfaced for this review did not contain any coverage of Pellicola or Mejiro as a photo gallery application. What follows is based entirely on the project README and its feature set [1].
Why people choose it
Without published user reviews to synthesize, the “why” has to come from what the project explicitly optimizes for.
The no-database argument is real. Most self-hosted gallery software — Lychee, Piwigo, PhotoPrism — requires a database engine. That’s not a dealbreaker for a VPS, but it’s a maintenance surface: backups, migrations, schema updates, connection pooling. Pellicola has none of that. Your photos live in a folder. Your descriptions live in .txt files next to the images. Your entire gallery is the filesystem. This is a fundamentally different operational model, and for photographers who just want to publish without running infrastructure, it’s a strong argument [1].
GPL-3.0 means you actually own it. No “community edition vs. enterprise” split. No per-user pricing. No feature gating. The license is copyleft — you can host it, modify it, use it internally, share it. There’s no commercial version to upsell you into [1][merged profile].
GDPR compliance by design. The README explicitly calls out: “Self-contained and GDPR-compliant — Pellicola has no external dependencies, and it doesn’t collect any user data” [1]. No Google Fonts loading from CDN, no analytics pixel, no third-party JavaScript. For European photographers publishing for clients, this matters.
The feature density is higher than the simplicity pitch suggests. It’s not just a slideshow — it reads EXIF, shows shooting data, embeds OpenStreetMap for geotagged photos, generates RSS feeds, supports multi-language descriptions, and includes a statistics view for camera models and focal lengths [1]. That’s a meaningful set of features for a no-build PHP app.
Features
Based on the project README [1]:
Core gallery:
- Paginated photo browsing — configurable photos-per-page
- Basic search by filename and description
- Multiple albums via subdirectories inside the photo folder
- Optional album-level descriptions via a
_preamble.htmlfile per folder - Random photo feature, usable for browser full-screen slideshows
- Access keys (keyboard shortcuts) for navigation
Metadata and location:
- Displays EXIF data per photo: aperture, focal length, shutter speed, ISO
- For geotagged photos: embeds an OpenStreetMap map marking where the photo was taken
- Option to show all geotagged photos in a collection-level map
- Can display OpenStreetMap links or geo URIs for external map apps
Photo descriptions:
- Add a
.txtfile alongside a.jpgto attach a description; HTML markup is supported - Can also read descriptions from the photo’s EXIF
UserCommentfield - Multi-language description support: prefix the
.txtfile with a language code (de-photo.txt,ja-photo.txt) and Pellicola auto-selects based on the visitor’s browser language
Downloads and RAW files:
- Optional download button for visitors (toggle in config)
- Password-protected downloads (hashed password in
config.php) - Upload a
.CR2,.NEF, or other RAW file alongside a JPEG and Pellicola auto-links it as a downloadable RAW companion
RSS and discovery:
- Auto-generated RSS feed of newly added photos
Statistics:
- View camera models used across the collection
- Focal length distribution
- Total photos, RAW files, disk usage, download counts
Deployment:
- Standard PHP on Apache or lighttpd (tested both)
- Docker container option via published image
- One-line install script for Debian/Ubuntu/Raspberry Pi
Pricing: SaaS vs self-hosted math
There is no SaaS tier. Pellicola is GPL-licensed software you run yourself. The pricing question is entirely about hosting costs [1][merged profile].
What Flickr charges: Free tier limits uploads. Pro plan runs $8.25/mo billed annually. No self-hosting.
What SmugMug charges: Plans from $9/mo to $45/mo. Proprietary, no self-hosting.
What Google Photos costs: Free with storage limits. After 15GB, $2.99/mo for 100GB. No self-hosting, all data on Google’s servers.
What Pellicola/Mejiro costs:
- Software: $0 (GPL-3.0)
- Shared hosting with PHP (Hetzner, Hostinger, or similar): $2–5/mo
- VPS if you prefer control (Hetzner CX11, Contabo): $4–6/mo
- Domain name: $10–15/year
Realistic all-in annual cost: $36–75/year — vs. $99–$540/year for hosted alternatives.
There’s no usage-based pricing, no storage tier, no “upgrade to unlock RAW downloads.” Everything in the README is available in the single GPL release.
The catch: You manage the server. Backups, updates, security patches — that’s on you. For a shared hosting setup this is low-friction. For a VPS, it’s slightly more involved.
Deployment reality check
For a PHP developer or anyone who’s configured a web server before: 10–15 minutes from zero to running gallery [1].
The README’s install path for Debian/Ubuntu is a single curl command:
curl -sSL https://raw.githubusercontent.com/dmpop/pellicola/main/install.sh | bash
Alternatively, git clone into your web root and edit config.php.
What you actually need:
- PHP 7.0 or higher (PHP 8.x works)
- PHP extensions: GD (image resizing), EXIF (metadata reading)
- A web server — Apache or lighttpd, both documented
- Write permissions on the
pellicoladirectory
What you don’t need:
- A database
- Composer / npm / any package manager
- Docker (though it’s available if you prefer containers)
- A reverse proxy to get started (useful for production HTTPS, not required)
What can go sideways:
- The GD and EXIF PHP extensions are usually pre-installed on shared hosts, but some minimally configured VPS images don’t include them. You’ll get blank thumbnails or missing EXIF data without them.
- Password hashing for download protection requires running a
php -rcommand to generate the hash — not obvious if you’re not a developer. - Multi-language description detection relies on the browser’s
Accept-Languageheader. If you’re deploying behind a caching proxy, language negotiation may not work as expected. - No admin UI. Adding photos means uploading files to the server directory via SFTP or rsync. If you expected a browser-based upload interface, it’s not here [1].
- Map display requires external OpenStreetMap tiles to load — the only external dependency. In privacy-maximalist setups, this is a small leak.
For non-technical users: This is PHP in a folder. If you’ve never managed a web server, expect a 2–4 hour learning curve including domain DNS and HTTPS setup. The install script eases the initial setup on Debian-based systems, but maintaining the server is ongoing.
Pros and cons
Pros
- No database. Operationally the simplest self-hosted gallery architecture possible. Nothing to migrate, no schema to maintain, backups are just
rsync photos/[1]. - Genuinely GDPR-compliant by design — no external JS, no analytics, no user tracking [1].
- EXIF display and map integration are well-implemented for a lightweight tool. Geotagged photo maps work without any configuration beyond enabling the feature in
config.php[1]. - Multi-language description support is a thoughtful feature that most small gallery tools skip entirely [1].
- RAW file companion downloads — upload a
.NEFor.CR2alongside the JPEG and the download link appears automatically [1]. - RSS feed generated automatically — useful for followers who use feed readers [1].
- Responsive design — works on mobile without configuration [1].
- GPL-3.0 — copyleft license, no commercial upsell path, no feature gating [merged profile].
Cons
- 186 GitHub stars — this is a niche tool with a small community. Expect sparse forum discussion, few third-party guides, and limited issue tracker activity [merged profile].
- No browser-based upload. Putting photos in the gallery requires SFTP or SSH access. Not usable by non-technical family members or clients without a workflow wrapper [1].
- No user accounts or access control. It’s public by default (with optional download password). No concept of private albums behind login, no per-user permissions [1].
- No video support — JPEG/JPG only, plus RAW companions. If you need video in your gallery, look elsewhere [1].
- PHP-only stack means it won’t run on modern static hosting (Vercel, Netlify, Cloudflare Pages). You need a PHP-capable server [1].
- One-person project with no commercial backing and no visible community governance. Unclear long-term maintenance trajectory [merged profile].
- No admin interface. Configuration is via editing
config.phpdirectly. Not approachable for non-developers [1].
Who should use this / who shouldn’t
Use Mejiro/Pellicola if:
- You’re a photographer who wants to publish albums online without paying Flickr or Smugmug every month.
- You already have a PHP-capable web host and adding another app is trivial.
- You want GDPR-clean photo sharing with no external trackers.
- You need geotagged photo maps and EXIF display without configuring a complex app.
- You’re comfortable uploading files via SFTP and editing a PHP config file.
Skip it if:
- You want a browser-based upload UI where you or clients can add photos without SSH access. Look at Lychee or Piwigo instead.
- You need private albums behind user login. Pellicola has no authentication system for gallery visitors.
- You need video support alongside photos.
- You want a large support community, active forum, or commercial support option.
- You’re not technical and have never set up a PHP application before — the setup is not hard, but it’s not zero-friction either.
Consider PhotoPrism instead if:
- You want AI-powered photo organization, face recognition, automatic categorization, and a modern SPA interface. PhotoPrism is a full photo management platform vs. Pellicola’s simple publishing tool.
Consider Piwigo instead if:
- You need multi-user access control, a plugin ecosystem, and a managed SaaS option alongside self-hosting.
Alternatives worth considering
- PhotoPrism — Full photo management platform with AI tagging, face recognition, and timeline browsing. Requires Docker and more RAM. ~35K GitHub stars. The serious option if you’re managing a personal photo library, not just publishing.
- Lychee — PHP gallery with a modern UI and browser-based upload. Requires MySQL. More polished admin experience at the cost of database dependency. ~3,400 GitHub stars.
- Piwigo — Mature gallery software with plugins, multi-user support, and a hosted option. Heavier than Pellicola but much larger community.
- Immich — Modern, actively developed alternative to Google Photos. Full mobile app, AI search, self-hosted. Requires Docker and more resources. Growing fast.
- Chevereto — Freemium PHP image hosting. Free tier is limited; paid license is $89 one-time. More polished UI, but the licensing model is different.
- Flickr (Pro) — If you want zero server maintenance and $8.25/mo is acceptable, Flickr’s Pro tier is mature and has an existing audience. Not self-hosted.
For the specific niche Pellicola fills — lightweight, no-database, EXIF-rich gallery publishing — the closest comparison is Lychee: same PHP roots, but Lychee has a browser-based upload UI and requires MySQL. If the no-database architecture is what draws you to Pellicola, Lychee loses that advantage but gains usability for non-technical users.
Bottom line
Mejiro/Pellicola is a well-considered solution to a specific, narrow problem: publishing photo albums on your own server without running a database or fighting a complex install process. The EXIF display, OpenStreetMap integration, multi-language descriptions, and RAW file companion downloads are thoughtful touches that show someone who actually uses the tool built it. For a solo photographer on shared hosting who wants to stop paying Flickr and doesn’t need client-facing upload workflows, it earns its place.
The limitations are real and unsurprising for a 186-star project: no browser upload, no user auth, no video, thin community. If any of those blockers apply to your use case, the alternatives above are worth the extra setup complexity.
If you need help deploying it — or any other self-hosted tool — on a VPS you actually own, that’s exactly what upready.dev does for clients.
Sources
- Pellicola GitHub Repository — README and project documentation (dmpop/pellicola, GPL-3.0, 186 stars). https://github.com/dmpop/pellicola
Note: No third-party review articles covering this specific tool were available at the time of writing. The sources provided during research were unrelated to the Pellicola/Mejiro photo gallery application. All feature claims in this review are sourced from the project’s own README and merged profile data.
Features
Integrations & APIs
- RSS / Atom Feeds
Security & Privacy
- Privacy-Focused
Localization & Accessibility
- Multi-Language / i18n
Mobile & Desktop
- Responsive / Mobile-Friendly
Category
Related Media & Streaming Tools
View all 334 →Immich
95KHigh-performance self-hosted photo and video management — automatic backup, ML-powered search, and a Google Photos-like experience on your own server.
Jellyfin
49KThe volunteer-built media solution that puts you in control of your media. Stream movies, shows, music, and photos to any device from your own server.
PhotoPrism
39KAI-Powered Photos App for the Decentralized Web. Tag and find pictures automatically without getting in your way.
Cobalt
39KSave what you love without ads, tracking, paywalls or other nonsense. Just paste the link and you're ready to rock.
qBittorrent
36KAn open-source software alternative to uTorrent. Feature-rich and runs on all major platforms.
SRS
29KSimple, high efficiency, realtime video server. Supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181.