A media library for noerd — upload, organize, and serve files across your Laravel app. Folders, tags, automatic image & PDF thumbnails, and OCR text extraction — multi-tenant out of the box.
For full documentation, visit noerd.dev.
- Media Library – Upload and manage files in a YAML-configured, searchable list view
- Folders & Tags – Organize media into hierarchical folders and tag them for fast retrieval
- Thumbnails & Previews – Automatic preview generation for images and PDFs (Imagick + Intervention Image)
- OCR – Extract text from uploaded documents for full-text search
- MediaResolver – A shared contract (
MediaResolverContract) other modules use to store uploads and resolve preview URLs without depending on Media directly - Multi-Tenant – Every file is scoped to its tenant, on a dedicated
mediastorage disk - Custom Attributes – Attach project-specific fields via the
custom_attributesJSON column — no module changes required
- A working noerd/noerd installation
- PHP 8.4+ with the
imagickextension - Laravel 12+
- Livewire 4+
# 1. Install the package (noerd/noerd is pulled in automatically)
composer require noerd/media
# 2. Install media content, navigation, and the storage disk
php artisan noerd:install-medianoerd:install-media copies the YAML configs, registers the Media app, adds a dedicated media disk to config/filesystems.php, and runs the module migrations.
Prerequisite: the noerd platform must already be installed (
composer require noerd/noerd && php artisan noerd:install). The media package depends on it.
Files are stored on a dedicated disk, configurable via the MEDIA_DISK environment variable (defaults to the media disk added during installation):
MEDIA_DISK=mediaphp artisan noerd:install-media # Install configs, navigation, storage disk and migrations
php artisan noerd:update-media # Update the published YAML configuration files
php artisan media:regenerate-thumbnails # Regenerate thumbnails for existing mediaintervention/image— image manipulation and thumbnail generationbarryvdh/laravel-dompdf— PDF renderingext-imagick— image and PDF preview rasterization
The submodule install is optional — only needed if you want to contribute to the development of Media. Install it as a git submodule instead:
git submodule add git@github.com:noerd-dev/media.git app-modules/mediaThen add a path repository and the package to your composer.json:
"repositories": [
{
"type": "path",
"url": "app-modules/media",
"options": {
"symlink": true
}
}
],
"require": {
"noerd/media": "*"
}Then run:
composer update noerd/media
php artisan noerd:install-mediaThis way, you can make changes directly in app-modules/media and push them back to the Media repository.