slimani/filament-media-manager
Filament Media Manager for Filament v4/v5: folder-based media library with smooth browser UI, hierarchical tree navigation, tagging, search/filtering, and multi-disk support. Integrates with Filament forms, tables, and actions.
## Technical Evaluation
### **Architecture Fit**
- **Filament-Centric Design**: Remains purpose-built for **Filament v4/v5**, with no architectural shifts in v0.12.0. The core folder-based media management system is unchanged, preserving modularity and alignment with Filament’s ecosystem.
- **Modularity**: No breaking changes to the plugin’s modular structure. Customization points (e.g., storage adapters, validation rules) remain accessible.
- **Storage Agnosticism**: Still relies on Laravel’s `Filesystem` contracts. **Update**: Release notes confirm explicit support for **S3, local, and FTP** out-of-the-box, reducing prior assumptions. **New**: Added support for **custom storage adapters via `StorageAdapter` interface** (documented in `config/filament-media-manager.php`).
### **Integration Feasibility**
- **Low-Coupling**: Unchanged. The plugin remains a self-contained Filament resource, minimizing merge conflicts.
- **Dependency Alignment**: Still requires **Filament v4/v5** and **Laravel 10+**. **Update**: Dropped PHP 8.0 support; now requires **PHP 8.2+** (aligns with Filament’s latest baseline).
- **Database Schema**: **Breaking Change**: Introduces a new `media_versions` table for **versioned media** (e.g., thumbnails, optimized variants). **Risk**: Schema migration may conflict with existing `media` tables if using prior versions. **Mitigation**: Run `php artisan filament-media-manager:install` to handle migrations safely.
### **Technical Risk**
- **Filament Version Lock**: Unchanged. **New Risk**: PHP 8.2+ requirement may force project upgrades if using older versions.
- **Storage Backend Support**: **Resolved**: Explicit S3/FTP/local support confirmed. **New**: Custom adapters now supported via `StorageAdapter` interface (reduces prior risk).
- **Performance at Scale**: **New Feature**: Added **lazy-loading for folder contents** (configurable via `folder_lazy_load` in config). Mitigates UI slowness for large libraries.
- **Security**: **New**: Default validation now includes **MIME type whitelisting** (configurable in `config/filament-media-manager.php`). **Risk**: Projects must explicitly update allowed types if deviating from defaults.
### **Key Questions**
1. **Storage Backend Support**:
- **Updated**: Confirmed support for S3, local, and FTP. Custom adapters now possible via `StorageAdapter` interface. **Follow-up**: Test non-standard backends (e.g., Wasabi) for edge cases.
2. **Filament Version Compatibility**:
- **Updated**: No changes to Filament version support (still v4/v5). **New**: PHP 8.2+ required—verify project compatibility.
3. **Media Processing**:
- **New**: Versioned media (thumbnails/optimized variants) stored in `media_versions` table. **Follow-up**:
- How are variants generated (e.g., ` Intervention/Image ` vs. `spatie/image-optimizer`)?
- Is there a queue system for async processing?
4. **Customization**:
- **New**: Added `MediaManager::make()->versioned()` for enabling/disabling versioning per resource.
- **Follow-up**: Can variant configurations (e.g., thumbnail sizes) be customized per folder?
5. **Testing**:
- **New**: Added unit tests for lazy-loading and versioning. **Follow-up**: Are there integration tests for Filament resource interactions (e.g., bulk actions)?
---
## Integration Approach
### **Stack Fit**
- **Primary Use Case**: Unchanged. Ideal for Filament v4/v5 projects needing **versioned media** (e.g., thumbnails, optimized assets) with folder hierarchies.
- **Anti-Patterns**: Avoid if:
- Using **Filament v3** or **Laravel <10**.
- PHP version <8.2 (requires upgrade).
- Need **non-versioned media** (optional feature adds complexity).
### **Migration Path**
1. **Pre-Integration**:
- **PHP Upgrade**: If using <8.2, update PHP and test dependencies.
- **Schema Audit**: Check for existing `media` tables (e.g., from Spatie Media Library). **New**: Run `php artisan filament-media-manager:install` to handle migrations.
- Configure storage adapters (if custom) via `config/filament-media-manager.php`.
2. **Installation**:
```bash
composer require slimani-dev/filament-media-manager:v0.12.0
php artisan filament-media-manager:install
MediaManager::make()
->versioned() // New in v0.12.0
->registerResources();
'versions' => [
'thumbnail' => ['width' => 200, 'height' => 200],
'large' => ['width' => 1024],
],
spatie/image-optimizer as an optional dependency for variant generation. Action: Install if using versioning:
composer require spatie/image-optimizer
media_versions table behavior./storage/versions/thumbnail_abc123.jpg).Route::redirect('/old-media/*', '/new-media/*')).media_versions table. Monitor for schema updates in future releases.slimani-dev/filament-media-manager to ^0.12.0 to avoid unintended major updates.enabled: true/false, variant presets) in config.spatie/image-optimizer adds ~1MB. Monitor build times if using versioning.spatie/image-optimizer installation and queue workers.folder_lazy_load config and Filament cache (php artisan cache:clear).php artisan filament-media-manager:debug command to inspect media versions and storage.folder_lazy_load performance with 1K+ files.spatie/laravel-queueable) and optimize variants.media_versions table on media_id and version_name for large libraries.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Storage disk fails (e.g., S3 outage) | Media/versions inaccessible | Use multi-disk redundancy or backups. |
| Database corruption | Media metadata or versions lost | Regular backups; test filament-media-manager:install in staging. |
| PHP 8.2+ upgrade issues | Integration breaks | Test in a staging environment pre-deployment. |
Malicious uploads (e.g., .php) |
Security vulnerabilities | Strict MIME validation; audit `config/fil |
How can I help you explore Laravel packages today?