noerd/media
A Laravel media management package for uploading, storing, and associating files with Eloquent models. It offers media collections, image conversions, and a fluent API for attaching, retrieving, and organizing media.
^0.7 (or an exact version) — this is pre-1.0, so treat minor bumps as potentially breaking and read each release.vendor:publish), not just config.2026_10_01_000001_move_generated_media_directories, which relocates .thumbnails/.variants to _thumbnails/_variants and rewrites stored paths. It is idempotent and a no-op on fresh installs, but it is the reason a straight php artisan migrate is now a required upgrade step, not just a fresh-install step.Where to look first: the migrations (particularly the media folder table and move_generated_media_directories), the Media model, the service provider (this is where the deferred folder creation lives), and the config file. Those files explain most behaviour you'll encounter day-to-day.
php artisan migrate as part of the upgrade runbook, not just deploy setup. Since v0.7.3 the generated-media path migration is your only supported way to move .thumbnails/.variants; run it in CI, staging, and prod, then verify a thumbnail renders.RefreshDatabase, migrations run but your root folder may not exist at the moment a test uploads. Add a setup helper (or a base test case) that creates the folder tree after migration and before the first upload.aiDocument usage before upgrading. The relation was removed from the Media model as unused. If your code called $media->aiDocument you now get a missing-relation error; replace it with your own relation or pivot.2026_10_01)._thumbnails/_variants, not a dot-prefixed directory..thumbnails, .variants), which the stock Forge nginx config refuses to serve — you get 403s on images that exist on disk. v0.7.3 restores the migration that fixes this; if you upgraded in the v0.7.0–v0.7.2 window, run php artisan migrate again to pick it up.composer install or package discovery will break on a fresh database..thumbnails path. Purge caches and regenerate derived URLs after running it..thumbnails / .variants strings — config overrides, blade templates, and queue jobs are the usual suspects. They will silently keep pointing at the old, now-empty directory."Folder not found"-style upload errors on a fresh install almost always mean app code (a seeder, a bootstrap hook, a console command) ran before migrations. Reorder rather than debugging the storage layer.aiDocument before upgrading. If it's unused, the removal is a no-op; if it isn't, the failure surfaces at runtime as a missing method/relation rather than at install time.composer.json while the package is 0.x, and skim release notes for relationship/model changes and re-added or amended migrations — both break silently.How can I help you explore Laravel packages today?