media_capture in config/filament-flex-fields.php. The examples below are entries inside that existing array; merge them into your published configuration rather than replacing unrelated settings.
After configuring your workflow, run php artisan fff:media:doctor for storage
and recovery settings, or add --queued for native background image conversions.
The diagnostics guide explains the profiles and
distinguishes configuration checks from worker and storage verification.
Default storage
maxSize(), minSize() and maxTotalSizeKb() use KiB. A per-operation MediaPolicy overrides the engine’s global policy; an upload field still enforces its own restrictions independently.
Public image storage
S3 and other Laravel disks
Configure the disk in Laravel first. Then select it by name:Tenant storage
scopedDirectory() resolves the directory using the field’s storage context. For a custom business partition, use directory(fn ($record) => ...) with trusted record values.
Resolve storage for each tenant
For application-specific tenant selection, register trusted server callbacks:CurrentTenantMedia is your application service. Return configured disk names and safe relative prefixes. These compatibility hooks feed the same destination service; workers need the same tenant bootstrap. Explicit disks still take precedence.
Antivirus requirements
require_virus_scan is true. Scanner example.
Quarantine is a private disk for rejected persisted content. Files rejected before a write do not have a stored object to quarantine. Quarantine contents need their own access and retention policy.
URL settings
os()->url(..., $expiresAt) uses the supplied expiry. Signing helper expiry is bounded to 1–10,080 minutes.
Custom signed URLs
Register a resolver in your service provider when your private delivery service needs custom signing. This callback returns a URL ornull:
PrivateMediaDelivery is your application’s service. The callback is a compatibility configuration hook; new custom adapters can implement their own url() method. Return no URL on signing failure rather than exposing private files publicly.
Use the configured helper for a relative stored path:
Temporary staging
StageOptions; the staging service uses the configuration-derived settings by default:
media_capture.staging for the standard service. See temporary upload usage.
Upload receipts and recovery
Native image limits
Conversion worker
sync, null, deferred and background connections. Configure queue retry_after or the provider visibility timeout above the job timeout. Web and workers need the same source/conversion disks, private journal disk, encryption key and lock store. Initialize your tenant access context in workers when required by your policies.
Spatie conversions use config/media-library.php and native Spatie workers instead. Spatie queue configuration.
Scheduled cleanup
In v4, the package registers these tasks with Laravel’s scheduler by default, independently of whether a media field is rendered:
To disable automatic registration of the staging and conversion-journal tasks, merge these entries into the existing
media_capture array in config/filament-flex-fields.php:
media_capture, staging, images and queue settings. These switches disable only the package’s automatic schedule registration. They do not disable media features or remove the commands; you can still run them manually or register your own schedule.
Capture-media retention has its own independent switch:
filament-flex-fields.media_capture.retention.schedule_enabled; it does not disable either staging or conversion-journal cleanup. In v3.1.19, only the capture-retention task exists; the other two tasks are v4 additions.
If your application caches configuration, rebuild it after changing these settings:
Retention
Environment variables
Transcription environment options are described in capture services. Configuration caching follows Laravel’s normal deployment workflow.