<< All versions
Skill v1.0.0
currentLLM-judged scan90/100dripdropz/onchain-voting/medialibrary-development
──Details
PublishedOctober 22, 2026 at 10:37 PM
Content Hashsha256:4a139aa21dff4b85...
Git SHA519f6d7f5571
──Files
Files (1 file, 3.5 KB)
SKILL.md3.5 KBactive
SKILL.md · 107 lines · 3.5 KB
version: "1.0.0" name: medialibrary-development description: Build and work with spatie/laravel-medialibrary features including associating files with Eloquent models, defining media collections and conversions, generating responsive images, and retrieving media URLs and paths. license: MIT metadata: author: Spatie
Media Library Development
Overview
Use spatie/laravel-medialibrary to associate files with Eloquent models. Supports image/video conversions, responsive images, multiple collections, and various storage disks.
When to Activate
- Activate when working with file uploads, media attachments, or image processing in Laravel.
- Activate when code references
HasMedia,InteractsWithMedia, theMediamodel, or media collections/conversions. - Activate when the user wants to add, retrieve, convert, or manage files attached to Eloquent models.
Scope
- In scope: media uploads, collections, conversions, responsive images, custom properties, file retrieval, path/URL generation.
- Out of scope: general file storage without Eloquent association, non-Laravel frameworks.
Workflow
- Identify the task (model setup, adding media, defining conversions, retrieving files, etc.).
- Read
references/medialibrary-guide.mdand focus on the relevant section. - Apply the patterns from the reference, keeping code minimal and Laravel-native.
Core Concepts
Model Setup
Every model that should have media must implement HasMedia and use the InteractsWithMedia trait:
php
use Spatie\MediaLibrary\HasMedia;use Spatie\MediaLibrary\InteractsWithMedia;class BlogPost extends Model implements HasMedia{use InteractsWithMedia;}
Adding Media
php
$blogPost->addMedia($file)->toMediaCollection('images');$blogPost->addMediaFromUrl($url)->toMediaCollection('images');$blogPost->addMediaFromRequest('file')->toMediaCollection('images');
Defining Collections
php
public function registerMediaCollections(): void{$this->addMediaCollection('avatar')->singleFile();$this->addMediaCollection('downloads')->useDisk('s3');}
Defining Conversions
php
use Spatie\MediaLibrary\MediaCollections\Models\Media;use Spatie\Image\Enums\Fit;public function registerMediaConversions(?Media $media = null): void{$this->addMediaConversion('thumb')->fit(Fit::Contain, 300, 300)->nonQueued();}
Retrieving Media
php
$url = $model->getFirstMediaUrl('images');$thumbUrl = $model->getFirstMediaUrl('images', 'thumb');$allMedia = $model->getMedia('images');
Do and Don't
Do:
- Always implement the
HasMediainterface alongside theInteractsWithMediatrait. - Use
?Media $media = nullas the parameter forregisterMediaConversions(). - Call
->toMediaCollection()to finalize adding media. - Use
->nonQueued()for conversions that should run synchronously. - Use
->singleFile()on collections that should only hold one file. - Use
Spatie\Image\Enums\Fitenum values for fit methods.
Don't:
- Don't forget to run
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"before migrating. - Don't use
env()for disk configuration; useconfig()or set it inconfig/media-library.php. - Don't call
addMedia()without callingtoMediaCollection()— the media won't be saved. - Don't reference conversion names that aren't registered in
registerMediaConversions().
References
references/medialibrary-guide.md