Library / SDK
ebess/advanced-nova-media-library avatar
ebess/advanced-nova-media-library

advanced-nova-media-library: Nova fields for Spatie media, without a maintainer

A Laravel Nova field for displaying, creating, updating and ordering a Spatie Media Library model.

616 stars331 forksVueLicense varies

At a glance

What is it?
This package gives Laravel Nova fields that upload, crop and reorder images stored by Spatie's media library, with a separate conversion per Nova view. Its README opens with a warning that the maintainer no longer has Nova access and is looking for someone to take over, which is the first thing to weigh before adopting it.
Who is it for?
Adopt advanced-nova-media-library if you already run Laravel Nova with Spatie media library, you want image uploads and drag and drop ordering inside the Nova resource form rather than a custom page, and you are prepared to vendor the package because upstream is looking for a maintainer. Do not adopt it for a new project that needs a supported dependency, since the README states the current maintainer cannot test changes or implement features without a Nova subscription.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Vue, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Nova fields that talk to Spatie media collections

The package fills a gap in the Laravel Nova ecosystem. Nova itself has no native field for the Spatie media library package, so a project that stores images with Spatie ends up writing its own Nova field or bolting a separate upload screen onto the admin panel. This package provides that field. It is described as a Laravel Nova field for displaying, creating, updating and ordering a Spatie Media Library model, so images appear on the index, detail and form views of a Nova resource and can be reordered there. The relationship with Spatie is explicit rather than reimplemented. The field works against named media collections on your model, and the second argument you pass to the field is the collection name, so the same model can carry a single main image and a multi image collection side by side.

Install is a Composer require and a config publish

Two steps get the package into a Laravel application. The first pulls it in:

bash
composer require ebess/advanced-nova-media-library

The second publishes the configuration file:

bash
php artisan vendor:publish --tag=nova-media-library

That publish step is not optional decoration, because the package's features are switched on from the config file. The relevant file is config/nova-media-library, which holds the feature flags such as whether existing media can be selected.

Generic files and images are separate field types

There are two field classes, and the choice between them is about the media rather than about the view. For generic files the README tells you to use the Files field, which is registered against a collection name like any other field:

php
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;

Files::make('Single file', 'one_file'),
Files::make('Multiple files', 'multiple_files'),

For images the Images field does the work, and it exposes a chain of methods that map onto Nova's screens. The example in the README sets a conversion for the index view, attaches validation rules and shows the collection name as the second argument:

php
use Ebess\AdvancedNovaMediaLibrary\Fields\Images;

public function fields(Request $request)
{
    return [
        Images::make('Main image', 'main') // second parameter is the media collection name
            ->conversionOnIndexView('thumb') // conversion used to display the image
            ->rules('required'), // validation rules
    ];
}

The multi image example extends that with separate conversions for preview, detail view, index and form, a fullSize option, a rules method for the collection as a whole and a singleImageRules method for per image checks such as a minimum width.

Conversions are chosen per view, not once

The per view conversion methods are the part of the API that pays off in a real admin. A Spatie conversion is a registered derivative of the original file, and this package lets you pick a different one for each place the image appears: conversionOnIndexView for the list, conversionOnPreview for the enlarged preview, conversionOnDetailView for the model page and conversionOnForm for the edit screen. On a resource list, showing a 130 by 130 thumbnail while keeping a medium size image in the preview avoids pulling full resolution files into a table of fifty rows. The README shows the model side that produces those conversions, with registerMediaConversions adding a thumb conversion of 130 by 130 and registerMediaCollections defining a main collection marked singleFile and a multi collection. The fullSize call in the field configuration is documented only as a full size column, so use it when you want a larger image display.

Drag and drop ordering and file name callbacks

When the multiple upload ability is enabled, the README says you can order the images by drag and drop, and the front end dependencies confirm the mechanism, since vuedraggable is what a sortable list is built on. Ordering is the reason to use this package rather than a plain upload field, because for a gallery the sequence is content. File naming is handled with callbacks. By default the uploaded file keeps its original filename, and setFileName takes a callback with three parameters, the original filename such as Fotolia 4711.jpg, the extension and the current model, so a project can store an MD5 hash of the name or a slug of the model name instead. The separate setName function changes the name field on the Media object itself, which by default holds the original filename without the extension, and its callback receives the original filename and the model.

enableExistingMedia opens a search endpoint to every user

The most important warning in the README concerns the existing media feature. If the same media files are uploaded to several models, this feature lets you pick an existing item instead of uploading the file again, and the README notes that selecting an existing media copies it. The cost is stated plainly: the feature exposes an endpoint to every user of your application to search existing media, and if the uploaded files or the custom properties on the media models are confidential, the README says not to enable it. Enabling it takes two steps, publishing the config if you have not and turning the flag on in config/nova-media-library with the enable-existing-media key, plus the enableExistingMedia call on the field. The feature also does not support temporary URLs, which means the copied media is served by whatever mechanism the package uses rather than by a signed link.

The README starts with a request for a new maintainer

The first section of the README is a maintenance notice, and it deserves to shape the decision. The current maintainer states that they no longer have access to Laravel Nova, which is required for testing and developing the package, and that they therefore cannot test changes effectively, verify bug reports or implement new features. The README asks for co-maintainers with active Nova subscriptions and for someone to take over primary maintenance. The version history explains why: 5.2, labelled Laravel 13 support, was published on 2026-04-15, 5.1 for Laravel 12 on 2025-03-17 and 5.0.1 on 2025-01-08, and the last push was on 2026-04-15. That is a package with recent work and no continuity. The front end also dates from its era, with Vue 2 and laravel-mix in the build, and the docker-compose file pins a node:10.11 image, so a modern asset pipeline will need adjusting.

Editorial conclusion

Adopt advanced-nova-media-library if you already run Laravel Nova with Spatie media library, you want image uploads and drag and drop ordering inside the Nova resource form rather than a custom page, and you are prepared to vendor the package because upstream is looking for a maintainer. Do not adopt it for a new project that needs a supported dependency, since the README states the current maintainer cannot test changes or implement features without a Nova subscription. Verify first that your Laravel version matches the release you install, with 5.2 labelled Laravel 13 support and 5.1 for Laravel 12, publish the nova-media-library config before you enable existing media selection, and keep that feature off if your uploaded files or custom properties are confidential.

Frequently asked questions

What does advanced-nova-media-library do?

It provides Laravel Nova fields for the Spatie media library, so you can display, create, update and order images of a media library model from the Nova resource page. The second field argument is the name of the media collection.

How do I install advanced-nova-media-library?

Run composer require ebess/advanced-nova-media-library and then publish the configuration with php artisan vendor:publish --tag=nova-media-library. The publish step is needed because the package features are switched on from config/nova-media-library.

Can I show a different image size on each Nova view?

Yes. The Images field exposes conversionOnIndexView, conversionOnPreview, conversionOnDetailView and conversionOnForm, so each screen can use a different Spatie conversion, and a fullSize call serves the original file instead of a conversion.

Is the existing media selection feature safe to enable?

The README warns that it exposes an endpoint to every user of the application to search existing media, and says not to enable it if the uploaded media or its custom properties are confidential. The feature also does not support temporary URLs.

Is advanced-nova-media-library still maintained?

The README states the package is seeking new maintainers, because the current maintainer no longer has Laravel Nova access and so cannot test changes, verify bug reports or implement features. Version 5.2, labelled Laravel 13 support, and the last push both date from 2026-04-15.

Official sources

  1. ebess/advanced-nova-media-library on GitHub
  2. Issues
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ebess-advanced-nova-media-library.svg)](https://hysenlabs.com/projects/ebess-advanced-nova-media-library)

Was this useful?