PhotoFlow Gallery Documentation
Complete guide to building stunning image galleries with PhotoFlow for Joomla 4, 5 & 6.
Getting Started
PhotoFlow Gallery is a modern, high-performance image gallery extension for Joomla 4, 5 & 6. It provides automatic image optimization, multiple display modes, and advanced security features out of the box.
PhotoFlow is a complete 3-in-1 package: Component (com_photoflow), Module (mod_photoflow), and Plugin (plg_photoflow). No legacy compatibility plugins needed.
System Requirements
| Requirement | Version |
|---|---|
| Joomla | 4.0+ / 5.x / 6.x |
| PHP | 8.0 or higher |
| MySQL | 5.7+ or MariaDB 10.3+ |
| GD Library | Required (for image processing) |
| WebP Support | Optional (recommended) |
Key Features
Smart Processing
Automatic thumbnail and detail image generation with WebP/AVIF conversion.
4 Display Modes
Grid, List, Masonry, and Carousel layouts with full customization.
Security Built-in
Password protection, ACL integration, and direct link only mode.
Installation
Installing PhotoFlow Gallery is straightforward using Joomla's extension installer.
Standard Installation
- Download the PhotoFlow Gallery package (
pkg_photoflow_X.X.X.zip) - Log in to your Joomla administrator panel
- Navigate to System → Install → Extensions
- Click the Upload Package File tab
- Select the downloaded ZIP file and click Upload & Install
- Wait for the installation to complete
After successful installation, PhotoFlow will create the necessary database tables and directory structure automatically.
Post-Installation Steps
- Create Image Directories: PhotoFlow automatically creates:
images/photoflow/originals/- Original uploaded imagesimages/photoflow/detail/- Detail view imagesimages/photoflow/thumbs/- Thumbnail images
- Configure Permissions: Ensure directories are writable (755 or 775)
- Enable the Plugin: Navigate to System → Plugins and enable the PhotoFlow plugin
- Create a Menu Item: Set up a menu item pointing to PhotoFlow Gallery
Make sure your server has sufficient PHP memory (recommended: 256MB or higher) for image processing operations.
Upgrading from Previous Version
To upgrade PhotoFlow, simply install the new version over the existing installation. Joomla will automatically handle the upgrade process and run any necessary database updates.
// Database updates are automatic
// Old images and settings are preserved
// No manual migration required
Configuration
PhotoFlow offers comprehensive configuration options accessible from Components → PhotoFlow → Options.
Gallery Display Settings
| Parameter | Description | Default |
|---|---|---|
| Display Mode | Choose between Grid, List, Masonry, or Carousel | Grid |
| Columns (Desktop) | Number of columns on desktop screens | 3 |
| Columns (Tablet) | Number of columns on tablet devices | 2 |
| Columns (Mobile) | Number of columns on mobile devices | 1 |
| Images Per Page | Number of images per page (0 for all) | 12 |
| Enable Virtual Scroll | Use virtual scrolling for large galleries | Yes |
| Enable Infinite Scroll | Load more images automatically on scroll | No |
| Aspect Ratio | Image aspect ratio (1:1, 4:3, 16:9, auto) | Auto |
Card Style Settings
Customize the appearance of image cards in your gallery:
- Hover Effect: None, Zoom, Lift, or Overlay
- Show Title: Display image titles on cards
- Show Description: Show descriptions on hover
- Show Stats: Display view and download counts
- Corner Radius: Border radius for cards (0-32px)
- Shadow Intensity: Card shadow strength
Categories & Albums
PhotoFlow uses Joomla's native category system with support for unlimited nesting levels. Categories can have different display settings and access levels.
Category Configuration
- Category Layout: Override global display mode per category
- Show Category Description: Display category description above images
- Show Subcategories: Display child categories
- Subcategory Style: Cards or compact list
- Ordering: Custom, alphabetical, date created, or date modified
Upload Settings
| Parameter | Description | Default |
|---|---|---|
| Max File Size | Maximum upload size in MB | 10 MB |
| Allowed Extensions | Permitted file extensions | jpg,jpeg,png,gif,webp |
| Thumbnail Size | Width/height for thumbnails (px) | 400x400 |
| Detail Size | Max dimensions for detail view (px) | 1920x1920 |
| JPEG Quality | JPEG compression quality (0-100) | 85 |
| Auto Generate WebP | Create WebP versions automatically | Yes |
| Auto Generate AVIF | Create AVIF versions automatically | No |
Security Configuration
Password Protection
- Global Password: Set a password for all images
- Per-Image Passwords: Individual passwords for specific images
- Pattern-Based Passwords: Dynamic passwords using date/time patterns
- Lockout Protection: Limit failed password attempts (default: 5)
- Lockout Duration: How long users are locked out (minutes)
Access Control
PhotoFlow fully integrates with Joomla's Access Control Lists (ACL). You can set different access levels for viewing, downloading, and managing images.
Performance Optimization
| Setting | Description | Recommended |
|---|---|---|
| Enable Query Cache | Cache database queries | Yes |
| Cache Lifetime | Cache duration in minutes | 60 |
| Lazy Loading | Load images as they enter viewport | Yes |
| Preload Count | Number of images to preload | 3 |
| Progressive JPEG | Generate progressive JPEGs | Yes |
CDN Settings
Configure Content Delivery Network integration for faster image delivery:
- Enable CDN: Use CDN for image delivery
- CDN URL: Your CDN base URL
- CDN Path: Path to PhotoFlow images on CDN
- Use for Thumbnails: Serve thumbnails via CDN
- Use for Detail Images: Serve detail images via CDN
- Use for Originals: Serve original images via CDN
Ensure your CDN is properly configured to pull files from your server before enabling CDN delivery.
Image Management
PhotoFlow provides powerful tools for managing your image library efficiently.
Uploading Images
Single Image Upload
- Navigate to Components → PhotoFlow → Images
- Click the New button
- Fill in the image details:
- Title: Image title (required)
- Alias: URL-friendly name (auto-generated if empty)
- Description: Image description
- Category: Select a category
- Access Level: Who can view this image
- Select the image file using the file picker
- Click Save & Close
PhotoFlow automatically generates thumbnails, detail images, and WebP/AVIF versions during upload based on your configuration.
Bulk Import
Import thousands of images from an existing directory on your server.
- Upload images to a directory on your server (e.g.,
images/import/) - Go to Components → PhotoFlow → Import
- Enter the source directory path
- Configure import settings:
- Target Category: Category for imported images
- Default Access: Access level for all imports
- Use Filename as Title: Auto-generate titles
- Skip Duplicates: Check for existing files
- Delete After Import: Remove source files
- Click Start Import
- Monitor the progress bar
// Example import directory structure
images/import/
├── vacation-2024/
│ ├── beach-sunset.jpg
│ ├── mountain-view.jpg
│ └── city-lights.jpg
└── portfolio/
├── portrait-1.jpg
└── landscape-1.jpg
Large imports are processed in batches to prevent timeouts. You can adjust batch size in the component options (default: 10 images per batch).
Thumbnail Management
PhotoFlow automatically manages image versions, but you can also regenerate them manually:
Regenerate Single Image
- Go to Components → PhotoFlow → Images
- Select the image
- Click Actions → Regenerate Thumbnails
Regenerate All Images
- Navigate to Components → PhotoFlow → Maintenance
- Click Regenerate All Thumbnails
- Confirm the action
- Wait for batch processing to complete
Regenerating thumbnails for large galleries can be resource-intensive. Consider running this operation during off-peak hours.
Image Metadata
PhotoFlow automatically tracks important metadata for each image:
- File Information: Filename, size, dimensions, MIME type
- Statistics: View count, download count
- Timestamps: Upload date, last modified date
- User Data: Uploaded by, modified by
- EXIF Data: Camera info, GPS coordinates (if available)
Maintenance Tools
Keep your gallery optimized with built-in maintenance tools:
Clear Cache
Clear query cache and thumbnail cache to free up space and refresh data.
Clean Orphaned Files
Remove image files that no longer have database records.
Optimize Database
Optimize database tables for better performance.
Display Modes
PhotoFlow offers four distinct display modes, each optimized for different use cases and aesthetics.
Grid Mode
Classic grid layout with uniform image cards arranged in responsive columns.
Grid Configuration
| Parameter | Options | Description |
|---|---|---|
| Columns | 1-6 | Number of columns per breakpoint |
| Gap Size | Small, Medium, Large | Space between grid items |
| Aspect Ratio | 1:1, 4:3, 16:9, Auto | Card aspect ratio |
| Fit Mode | Cover, Contain | How images fill the card |
Best for: Portfolio sites, product galleries, general image collections
List Mode
Horizontal layout showing images in a single column with metadata alongside.
List Features
- Thumbnail on left, details on right (or reversed)
- Full description and metadata display
- Compact view for easy browsing
- Sortable columns
Best for: Document libraries, image archives, searchable galleries
Masonry Mode
Pinterest-style layout where images maintain their aspect ratios in a flowing grid.
Masonry Configuration
| Parameter | Options | Description |
|---|---|---|
| Columns | 2-6 | Target number of columns |
| Column Width | Auto, Fixed | How column widths are calculated |
| Gutter | 0-32px | Space between items |
| Item Resize | Yes, No | Fit items to column width |
Best for: Photography portfolios, inspiration boards, mixed aspect ratio collections
Carousel Mode
Slideshow-style presentation with navigation controls and autoplay options.
Carousel Features
- Navigation: Arrow buttons, thumbnails, or dots
- Autoplay: Configurable interval and pause on hover
- Transitions: Slide, fade, or zoom effects
- Looping: Infinite or one-way cycling
- Thumbnails: Optional thumbnail strip
- Keyboard: Arrow key navigation support
- Touch: Swipe gestures on mobile
Carousel Configuration
| Parameter | Default | Description |
|---|---|---|
| Autoplay | Yes | Start slideshow automatically |
| Interval | 5000ms | Time between transitions |
| Transition | Slide | Animation type |
| Show Controls | Yes | Display navigation arrows |
| Show Indicators | Yes | Display dot indicators |
Best for: Featured images, hero sections, product showcases
You can override the global display mode for individual categories, allowing different layouts throughout your site.
Security Features
PhotoFlow includes enterprise-grade security features to protect your images and control access.
Password Protection
Protect individual images or entire categories with passwords.
Setting Up Image Passwords
- Edit an image or category
- Enable Password Protected
- Enter a password
- Save the changes
Password Types
Static Password
Single password that never changes. Simple and secure for permanent protection.
Pattern Password
Dynamic password based on date/time patterns. Auto-rotating for enhanced security.
Per-User Access
Integrate with Joomla user system for personalized access control.
Pattern Password Examples
// Date-based patterns
{Y}{m}{d} → 20240315 (changes daily)
{Y}{W} → 202411 (changes weekly)
week{W} → week11 (readable format)
// Time-based patterns
{Y}{m}{d}{H} → 2024031514 (changes hourly)
day{d}hour{H} → day15hour14
// Custom patterns
photo{Y}{m} → photo202403
gallery_{W} → gallery_11
Access Control Lists (ACL)
PhotoFlow fully integrates with Joomla's ACL system for granular permission control.
Available Permissions
| Permission | Description | Default Group |
|---|---|---|
| View Gallery | Access gallery pages | Public |
| View Images | View full-size images | Public |
| Download Images | Download original files | Registered |
| Upload Images | Upload new images (frontend) | Author |
| Edit Own | Edit own uploaded images | Author |
| Edit All | Edit any images | Manager |
| Delete Images | Delete images | Administrator |
| Configure | Access component options | Administrator |
Direct Link Only Mode
Hide images from gallery listings, making them accessible only via direct URL.
Use Cases
- Private Sharing: Share specific images without exposing the full gallery
- Email Campaigns: Include unique image links in emails
- API Integration: Serve images to external applications
- Temporary Access: Grant limited-time access via URL
Edit an image and enable Direct Link Only. The image will be hidden from gallery views but accessible via its direct URL.
Lockout Protection
Prevent brute-force password attacks with automatic lockout after failed attempts.
Lockout Configuration
- Max Attempts: Number of failed tries before lockout (default: 5)
- Lockout Duration: How long to block access (default: 30 minutes)
- Track By: IP address or session
- Admin Notification: Email alerts for lockout events
Use strong passwords (12+ characters), enable lockout protection, and regularly review access logs to maintain gallery security.
Download Security
Control how users can download your images:
- Disable Right-Click: Prevent context menu access
- Watermarking: Add watermarks to downloaded images
- Download Tracking: Log all download activities
- Rate Limiting: Limit downloads per user/IP
- Hotlink Protection: Prevent embedding on external sites
API Reference
PhotoFlow provides a RESTful JSON API for programmatic access to gallery data.
Authentication
API requests use Joomla's standard authentication system:
// Using Joomla API Token
GET /index.php?option=com_photoflow&view=gallery&format=json
Authorization: Bearer YOUR_JOOMLA_API_TOKEN
// For public endpoints (no auth required)
GET /index.php?option=com_photoflow&view=gallery&format=json
Endpoints
Get Gallery Images
Retrieve a list of images from the gallery.
GET /index.php?option=com_photoflow&view=gallery&format=json
// Parameters
?limit=12 // Images per page
&offset=0 // Pagination offset
&category=5 // Filter by category ID
&ordering=created // Sort field (created, title, hits, downloads)
&direction=DESC // Sort direction (ASC or DESC)
Response Format
{
"success": true,
"data": {
"images": [
{
"id": 1,
"title": "Sunset Beach",
"alias": "sunset-beach",
"description": "Beautiful sunset...",
"filename": "sunset-beach.jpg",
"thumbnail": "/images/photoflow/thumbs/sunset-beach.jpg",
"detail": "/images/photoflow/detail/sunset-beach.jpg",
"hits": 142,
"downloads": 23,
"created": "2024-03-15 14:30:00",
"category_id": 5,
"category_title": "Landscapes"
}
],
"pagination": {
"total": 48,
"limit": 12,
"offset": 0,
"pages": 4
}
}
}
Get Single Image
GET /index.php?option=com_photoflow&view=image&id=1&format=json
// Response
{
"success": true,
"data": {
"id": 1,
"title": "Sunset Beach",
"alias": "sunset-beach",
"description": "Beautiful sunset over calm waters",
"filename": "sunset-beach.jpg",
"thumbnail": "/images/photoflow/thumbs/sunset-beach.jpg",
"detail": "/images/photoflow/detail/sunset-beach.jpg",
"original": "/images/photoflow/originals/sunset-beach.jpg",
"filesize": 2458624,
"width": 1920,
"height": 1080,
"mime_type": "image/jpeg",
"hits": 142,
"downloads": 23,
"created": "2024-03-15 14:30:00",
"modified": "2024-03-15 14:30:00",
"created_by": "John Doe",
"category": {
"id": 5,
"title": "Landscapes",
"alias": "landscapes"
}
}
}
Get Categories
GET /index.php?option=com_photoflow&view=categories&format=json
// Response
{
"success": true,
"data": {
"categories": [
{
"id": 1,
"title": "Landscapes",
"alias": "landscapes",
"description": "Beautiful landscape photography",
"parent_id": 0,
"image_count": 24,
"path": "landscapes"
}
]
}
}
Download Image
GET /index.php?option=com_photoflow&task=image.download&id=1
// Returns the original image file
// Increments download counter
// Requires download permission
Error Handling
All API responses include a success field. On error:
{
"success": false,
"error": {
"code": 404,
"message": "Image not found"
}
}
Common Error Codes
| Code | Meaning | Description |
|---|---|---|
| 400 | Bad Request | Invalid parameters or malformed request |
| 401 | Unauthorized | Authentication required or failed |
| 403 | Forbidden | Insufficient permissions |
| 404 | Not Found | Resource doesn't exist |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Server Error | Internal server error |
JavaScript Integration
Example using fetch API:
// Fetch gallery images
async function loadGallery() {
try {
const response = await fetch(
'/index.php?option=com_photoflow&view=gallery&format=json&limit=12'
);
const data = await response.json();
if (data.success) {
displayImages(data.data.images);
} else {
console.error('API Error:', data.error);
}
} catch (error) {
console.error('Network Error:', error);
}
}
// Display images
function displayImages(images) {
const gallery = document.getElementById('gallery');
images.forEach(image => {
const card = document.createElement('div');
card.className = 'image-card';
card.innerHTML = `
<img src="${image.thumbnail}" alt="${image.title}">
<h3>${image.title}</h3>
<p>${image.description}</p>
`;
gallery.appendChild(card);
});
}
For cross-origin requests, ensure your server is configured to send appropriate CORS headers or use the same-origin API.
Rate Limiting
API requests are rate-limited to prevent abuse:
- Anonymous Users: 60 requests per hour
- Authenticated Users: 300 requests per hour
- API Token: 1000 requests per hour
Rate limit headers are included in responses:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1615825200
Support & Resources
Community Forum
Join our community forum for discussions, tips, and peer support.
FAQ
Find quick answers to frequently asked questions about PhotoFlow.
Changelog
Review version history and track new features and improvements.
If you can't find what you're looking for in this documentation, please don't hesitate to reach out through our support channels. We're here to help make your PhotoFlow experience exceptional.