Download the PHP package voodflow/vmedia without Composer
On this page you can find all versions of the php package voodflow/vmedia. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package vmedia
VoodMedia (voodflow/vmedia)
Media Vault for Laravel + Filament: upload once, reuse everywhere. One vault storage copy, many gallery memberships, morph attachments for your domain models.
Works standalone in any Filament app. Optional integrations with VoodBuilder (Asset Manager), Voodflow (e.g. Approval Page heroes), and any third-party package that registers its own vault root.
Built on Filament 5 and Spatie Media Library.
Screenshots
Media library
Central library: preview, galleries, usage counts, type, size, and upload time. Upload media or Import ZIP from the header.
Galleries (folders & albums)
Organize vault media with a hierarchy: Folder = container (year, product, plugin…); Album = holds photos/files. Mark a default gallery and toggle public albums.
Album editor
Edit album metadata (parent, slug, public/default), manage images (browse library, upload, ZIP import, drag reorder), and assign album tags.
Picker (VmediaPicker)
Modal for forms and builders: upload into the selected folder/album, filter by parent/gallery, search, grid/list view, multi-select → Use selection.
Requirements
| Requirement | Notes |
|---|---|
| PHP | 8.4+ |
| Laravel | 12 or 13 |
| Filament | 5 |
| Spatie Media Library | 11 |
PHP gd extension |
Must be built with JPEG (and preferably WebP + FreeType). Spatie generates thumb conversions on upload; without JPEG support you get imagecreatefromstring(): No JPEG support in this PHP build. |
Verify in the app container:
Docker / php:*-fpm example:
Quick start (5 minutes)
Register on the Filament panel:
Attach media to a model:
Upload in a Filament form:
Pick existing vault media:
Plugin vault roots (for packages & host apps)
VoodMedia does not hardcode product folders. Each package (or the host app) registers a top-level folder + default Library album, then uses it for uploads/pickers.
1. Register + ensure on boot
In your package ServiceProvider (or AppServiceProvider):
Equivalent low-level API:
After boot you get a folder Acme with a child Library album (upload target when browsing that folder).
Sync all registered roots (after companions have booted):
2. Use the vault in code
Optional: nest under a configured parent (settings / multi-tenant layout):
3. Conventions
| Concept | Rule |
|---|---|
source |
Stable string stored as integration_source (e.g. acme, voodflow) |
slug |
URL/path segment for the folder |
| Library album | Auto-created under the root; use it as default upload target |
| Isolation | Your package owns only its source; do not hardcode other products in VoodMedia |
Shared Logos folder is provided by VoodMedia itself (PluginVaultRootGroup::logos()).
Model
- Vault — singleton Spatie owner of every file on disk (one storage copy)
- Galleries — many-to-many membership (a photo/video/file can sit in several galleries)
- Folders vs albums — folders nest structure; albums hold media
- Default gallery — fallback target for uploads when no gallery is selected; Choose can browse any gallery
- Attachments —
HasAttachedMediamorph pivot (domain models never own Spatie collections)
Features
| Area | What you get |
|---|---|
| Admin | Library + galleries hierarchy, metadata (alt, caption, credits; video poster on videos), soft delete / trash |
| Picker | VmediaPicker + VmediaFileUpload for other plugins |
| Files | Photos, videos, and documents (PDF/Office/ZIP…) |
| Thumbs | Spatie thumb conversion (WebP) for images |
| Usage | Attachment counts; delete protected when media is in use |
| Tags | Media tags + album tags; bulk assign |
| Duplicates | SHA-256 reuse (optional) |
| ZIP import | Bulk extract into the vault |
| Events | MediaStored, MediaAttached, MediaDetached, MediaDeleted, MediaRestored |
| Stats | Dashboard widget + php artisan vmedia:stats |
| Orphans | php artisan vmedia:prune-orphans --force |
| Public | GET /galleries/{slug} Blade gallery for is_public galleries |
HTTP API (package-owned)
| Method | Path | Role |
|---|---|---|
GET |
/vmedia/media/galleries |
Gallery list + counts |
GET |
/vmedia/media?page=&per_page=&gallery_id=&type=&q= |
Paginated assets (type: image|video|file) |
POST |
/vmedia/media/upload |
Upload; optional gallery_id (folder/album — folders resolve to library album) |
DELETE |
/vmedia/media/{media} |
Soft-delete (?force=1 force-deletes) |
All routes require authentication (and optional Gate ability VMEDIA_ABILITY).
Config highlights
Storage disk (local / S3 / …)
VMEDIA_DISK is any disk from Laravel’s config/filesystems.php. Spatie stores vault files on that disk (MediaVault → useDisk(...)).
Local (default):
S3 (or compatible): define the disk as usual, then point VoodMedia at it:
config/filesystems.php (stock Laravel s3 disk is enough):
Require the Flysystem S3 adapter if the host app does not already:
No VoodMedia-specific S3 code path: Filament uploads and Spatie conversions use the configured disk. Keep Livewire temporary uploads on a local disk if you prefer (LIVEWIRE_TEMPORARY_FILE_UPLOAD_DISK=local); only the final vault objects need VMEDIA_DISK=s3.
Public URLs come from Storage::disk(...)->url(...) (local → /storage/..., S3 → bucket/CloudFront URL). Use a public bucket (or CDN AWS_URL) so thumbs and embeds resolve without signed URLs.
Docs
- Release checklist (internal): docs/RELEASE_CHECKLIST.md
License
MIT — see LICENSE.
All versions of vmedia with dependencies
ext-gd Version *
filament/filament Version ^5.0
filament/spatie-laravel-media-library-plugin Version ^5.0
illuminate/contracts Version ^12.0|^13.0
spatie/laravel-medialibrary Version ^11.0
spatie/laravel-package-tools Version ^1.15
spatie/laravel-sluggable Version ^3.0