- How do I install mostafaznv/nova-video in a Laravel Nova application?
- Install it with Composer (composer require mostafaznv/nova-video), then publish the package config tags, run the larupload migrations, execute storage:link, and run nova:publish. Next, attach the larupload trait to the Eloquent model that stores the video and register the field in your Nova resource with Video::make('Video')->disk(...)->rules(...). The mechanical setup is well-trodden for a Laravel team, and a competent developer can validate the whole flow with a 30-minute spike. Budget extra time only if your environment still needs FFmpeg installed or a container base image rebuilt.
- Does nova-video require FFmpeg, and how do queued conversions work?
- Yes. Nova Video is a thin Nova field that delegates transcoding and poster extraction to mostafaznv/laravel-video, which shells out to FFmpeg, so the FFmpeg binary must be available on the PATH for both the PHP-FPM user and the queue worker user. Conversions run as queued jobs, so you should provision a dedicated media queue and size worker timeouts to match transcode duration. Uploads, naming, metadata, and cleanup are handled by mostafaznv/larupload underneath the field. Treat FFmpeg plus queue workers as a durable operational commitment, not an implementation detail.
- Which Laravel, PHP, and Nova versions does nova-video support?
- The package targets Laravel Nova shops running PHP 8.1 or newer. Nova field packages are tightly coupled to Nova major versions because of frontend asset and Vite changes, so always confirm compatibility with your Nova major before upgrading. Pin Nova, mostafaznv/larupload, and mostafaznv/laravel-video together, since a break can originate in any of the three. Verify the current constraints in the composer.json and README before planning an upgrade.
- How does automatic thumbnail and poster generation work in nova-video?
- Poster extraction is handled by the underlying laravel-video library, which uses FFmpeg to pull a frame from the uploaded file and store it on the configured disk. The Nova field then shows the poster and a built-in preview player in the admin panel. Because conversions are queued, a failed job can leave a playable video record with no poster, so add instrumentation or monitoring rather than assuming success. Editors often notice missing posters before you do.
- How do I configure storage disks and paths for video uploads?
- Storage behavior comes from larupload, and the Nova field exposes it through a chainable disk() method, so you can point videos at local storage, S3, or another configured filesystem disk. For local disks run storage:link so the preview player can serve the file, and make sure the disk has the public or CDN access semantics your panel needs. Paths, naming, and cleanup rules are configurable through the published config files. Plan asset volume and egress costs for the disk you choose before going live.
- How do I validate video file size and MIME types with nova-video?
- Attach standard Laravel validation rules to the field using ->rules(), including file size and MIME type constraints, and Nova will enforce them on submit. Remember that field-level rules only cover the application layer; you must also reconcile upload limits across php.ini, nginx, and any load balancer in front of the app. Keep MIME restrictions realistic, since browser-reported types and transcode-friendly formats can differ. Test with real files near the size limit rather than small samples.
- How should I test nova-video uploads and conversions in a Laravel project?
- Run a short spike: upload a roughly 20 MB MP4 through the Nova form, confirm inline playback works, confirm a poster was generated, and inspect the bucket or disk contents directly. That gives a genuine go/no-go signal in a single day. After adoption, add automated coverage around the conversion jobs and the field's validation rules, and consider assertions on the stored paths and metadata. Since this package has a small downstream population, you are effectively the QA function for upgrades.
- What are the alternatives to nova-video if I don't want to run FFmpeg myself?
- Managed transcoding services such as Mux, Cloudflare Stream, or AWS MediaConvert remove the need to operate FFmpeg and a media worker pool. Nova Video deliberately commits you to in-house transcoding via larupload and laravel-video, which is cheap to adopt but expensive to unwind once editors and assets depend on it. If your intended end state is a managed service, decide whether this package is a deliberate interim step or accidental lock-in. There is no built-in managed-service escape hatch.
- Is mostafaznv/nova-video actively maintained, and how risky are Nova upgrades?
- It is a single-maintainer package with a small star count and essentially no dependents, so there is no downstream population stress-testing releases ahead of you. Nova field packages tend to break across Nova major versions, and the typical failure mode is a blank form rather than an exception, meaning it can silently stop working without paging anyone. Pin all three packages in the chain and assign someone accountable for retesting the field after every Nova upgrade. The Apache-2.0 license removes legal risk; the residual risk is operational and lifecycle.
- How do I handle queue workers and upload limits for large video files in production?
- Provision a dedicated media queue so transcodes do not starve other jobs, and set worker timeouts and retry behavior to match expected transcode duration. Reconcile upload limits across php.ini, nginx, and any load balancer, and make sure FFmpeg is on the PATH for both the web and worker users. Budget about a day for a greenfield environment and more if your platform is containerized and the base image needs rebuilding. Monitor conversion failures explicitly, since a video can remain playable while renditions and posters silently go missing.