A Filament plugin for displaying image galleries with zoom, rotate, and flip capabilities
al-saloul/filament-image-gallery is a Laravel package for a filament plugin for displaying image galleries with zoom, rotate, and flip capabilities.
It currently has 45 GitHub stars and 25.381 downloads on Packagist (latest version v3.0.0).
Install it with composer require al-saloul/filament-image-gallery.
Discover more Laravel packages by al-saloul
or browse all Laravel packages to compare alternatives.
Last updated
A Filament plugin for displaying image galleries with zoom, rotate, flip, and fullscreen capabilities using Viewer.js.
| Thumbnails | Gallery Viewer |
|:----------:|:--------------:|
|
|
|
| Thumbnails | Gallery Viewer |
|:----------:|:--------------:|
|
|
|
| Version | Filament | PHP | Laravel | |---------|----------|-----|---------| | 3.x | 3.x | 4.x | 5.x | ^8.2 | ^10.0 | ^11.0 | ^12.0 | | 2.x | 3.x | 4.x | ^8.2 | ^10.0 | ^11.0 | ^12.0 | | 1.x | 3.x | ^8.1 | ^10.0 | ^11.0 |
spa() mode without page reloadcomposer require al-saloul/filament-image-gallery
You can use the imageGallery() method on any standard Filament ImageColumn or ImageEntry to enable the gallery viewer.
use Filament\Tables\Columns\ImageColumn;
ImageColumn::make('images')
->circular()
->stacked()
->limit(3)
->overlap(4)
->remainingTextBadge(true)
->imageGallery() // Enables the gallery viewer
use Filament\Infolists\Components\ImageEntry;
ImageEntry::make('images')
->imageGallery() // Enables the gallery viewer
use Alsaloul\ImageGallery\Tables\Columns\ImageGalleryColumn;
ImageGalleryColumn::make('images')
->getStateUsing(fn ($record) => $record->images->pluck('image')->toArray())
->disk(config('filesystems.default'))
->visibility('private') // if private generate temporary url
->circular()
->stacked(2)
->ring(1, '#fff')
->limit(3)
->remainingTextBadge(true)
->limitedRemainingText(),
| Method | Description | Default |
|--------|-------------|---------|
| disk(string) | Storage disk for images | null |
| visibility(string) | 'public' or 'private' (for temporary URLs) | 'public' |
| thumbWidth(int) | Thumbnail width in pixels | 40 |
| thumbHeight(int) | Thumbnail height in pixels | 40 |
| limit(int\|null) | Maximum images to show | 3 |
| stacked(int\|bool) | Stack thumbnails. Pass int for custom spacing | false |
| overlap(int) | Set overlap value for stacked images (0-8) | 2 |
| square(bool) | Square shape with rounded corners | false |
| circular(bool) | Circular shape | false |
| ring(int, string) | Border ring with width and color | 1, null |
| ringColor(string) | Set ring color separately | null |
| limitedRemainingText(bool) | Show "+N" text for remaining images | true |
| remainingTextBadge(bool) | Whether to show remaining text as a badge (true) or plain text (false) | false |
use Alsaloul\ImageGallery\Infolists\Entries\ImageGalleryEntry;
ImageGalleryEntry::make('images')
->disk(config('filesystems.default'))
->visibility('private') // if private generate temporary url
->thumbWidth(128)
->thumbHeight(128)
->imageGap('gap-4'),
| Method | Description | Default |
|--------|-------------|---------|
| disk(string) | Storage disk for images | null |
| visibility(string) | 'public' or 'private' | 'public' |
| thumbWidth(int) | Thumbnail width in pixels | null (natural size) |
| thumbHeight(int) | Thumbnail height in pixels | null (natural size) |
| imageGap(string) | Tailwind gap class | 'gap-4' |
| rounded(string) | Tailwind rounded class | 'rounded-lg' |
| wrapperClass(string) | Additional wrapper classes | null |
<x-image-gallery::image-gallery
:images="$model->images"
:thumb-width="150"
:thumb-height="150"
rounded="rounded-xl"
gap="gap-6"
/>
ImageGalleryColumn::make('images')
->disk('s3')
->circular()
->stacked(3)
->limit(3)
// For private files
ImageGalleryColumn::make('images')
->disk('s3')
->visibility('private') // Generates temporary URLs
->limit(3)
ImageGalleryColumn::make('images')
->circular()
->stacked()
->overlap(3) // Control overlap spacing (0-8)
->ring(2, '#3b82f6')
->limit(3)
// Or use shorthand: stacked(3) sets both stacked=true and overlap=3
ImageGalleryColumn::make('images')
->circular()
->stacked(3)
->limit(3)
->remainingTextBadge() // Show as a Filament badge
ImageGalleryColumn::make('images')
->limit(3)
->limitedRemainingText(true) // Show the "+N" text
->remainingTextBadge(true) // Format as a badge (default is plain text)
// Images display at their natural size
ImageGalleryEntry::make('images')
->disk(config('filesystems.default'))
->imageGap('gap-4'),
Optionally, publish the config file:
php artisan vendor:publish --tag=image-gallery-config
Please see CHANGELOG for more information.
The MIT License (MIT). Please see License File for more information.