- How do I install Filament Curator in a Laravel project with Filament Panels?
- Run `composer require awcodes/filament-curator` and execute `php artisan curator:install`. For Filament Panels, register the plugin in your panel configuration. Ensure you’ve set up a custom theme first, as Curator requires theme integration for styles and views.
- Does Filament Curator work with Filament v3 or v4? What about v2?
- Yes, Curator supports Filament v2 (package v1.x), v3 (v2.x), and v4 (v4.x). Each major version of Curator is locked to a specific Filament version—check the compatibility table in the README. Upgrading Filament may require updating Curator to avoid breaking changes.
- Can I use Filament Curator with Spatie Media Library?
- No, Curator explicitly blocks Spatie Media Library integration. The package is designed as a standalone alternative, offering native Filament media management without dependency conflicts. Migrate away from Spatie if needed before adopting Curator.
- How do I handle media storage (e.g., S3) with Curator?
- Curator is storage-agnostic and supports any Laravel disk (local, S3, etc.). Configure your default disk in `config/filesystems.php` and ensure Glide is set up for your chosen backend. Custom path generators (e.g., `DatePathGenerator`) can be configured via the published config file.
- What’s the best way to optimize Glide performance for large media libraries?
- Configure Glide’s cache paths and TTLs in `config/glide.php` to minimize processing overhead. Use `imagick` as the driver if available, and enable lazy loading (`lazyLoad()`) for non-critical media. For high-volume sites, pre-generate thumbnails during uploads to reduce runtime processing.
- How do I add Curator fields to a Filament resource form?
- Use the `CuratorPicker` field in your resource’s form fields. For example: `CuratorPicker::make('image')->columnSpanFull()`, then register the field in your resource’s `getFormFields()` method. Curator integrates natively with Filament’s form system.
- Can I customize media curation presets (e.g., resizing, focal points) for specific use cases?
- Yes, Curator allows custom curation presets via Glide’s configuration. Extend the `CuratorServiceProvider` or override default behaviors in your published config. For reusable presets, create a service class to manage Glide transformations dynamically across environments.
- Will Filament Curator work with my existing Filament plugins or resources?
- Curator is designed for low coupling and integrates seamlessly with Filament’s plugin system. Replace existing media fields (e.g., `FileUpload`) with `CuratorPicker` without disrupting other plugins. Test relationships (e.g., `hasMany`) to ensure eager loading (`with()`) is applied where needed.
- How do I secure media access (e.g., tenant isolation, signed URLs) in production?
- For S3 or cloud storage, use signed URLs via Laravel’s `temporaryUrl()` method. Configure Glide’s `force()` option carefully to avoid exposing raw media paths. For tenant isolation, implement custom path generators or middleware to scope media access by tenant ID.
- Are there performance concerns with N+1 queries when using Curator in table columns?
- Yes, relationships in table columns (e.g., `CuratorPicker` in a `Table`) trigger N+1 queries by default. Mitigate this by eager loading relationships with `with(['media'])` in your query. For large datasets, consider lazy loading or pagination to reduce query load.