@extends('layouts.app') @section('title', 'Media Library - Vendor') @section('content')
@include('vendor.partials.sidebar-column')

Media Manager

Media Library

All product photos, gallery images, and shop visuals in one place

@include('partials.vendor-media-advice') @if(session('success'))
{{ session('success') }}
@endif
Upload Image

Add a primary or gallery image to an existing product

@if($products->isEmpty())
No products yet

Create a product first, then upload images here or during listing.

Create Product
@else
@csrf
JPG, PNG, WebP — max 2 MB. Auto-converted to WebP.
@endif
Visual Library

{{ $stats['total_images'] }} assets across your shop

@if($search) Clear @endif
@php $filters = [ 'all' => ['label' => 'All', 'count' => $stats['total_images']], 'product' => ['label' => 'Product', 'count' => $stats['product_images']], 'gallery' => ['label' => 'Gallery', 'count' => $stats['gallery_images']], 'carousel' => ['label' => 'Carousel', 'count' => $stats['carousel_images']], 'shop' => ['label' => 'Shop', 'count' => $stats['shop_images']], ]; @endphp @foreach($filters as $key => $meta) {{ $meta['label'] }} {{ $meta['count'] }} @endforeach
@if($images->count())
@foreach($images as $image)
@if($image['url']) {{ $image['product_name'] }} @else
@endif
@if($image['url']) @endif @if($image['product_id']) @elseif($image['edit_url']) @endif @if($image['can_delete'] && $image['gallery_id'])
@csrf @method('DELETE')
@endif
{{ $image['type_label'] }} @if($image['is_primary']) Primary @endif
{{ $image['product_name'] }}
@if($image['product_sku']) {{ $image['product_sku'] }} @endif @if($image['size_bytes'] > 0) {{ number_format($image['size_bytes'] / 1024, 0) }} KB @endif
@if($image['product_status']) {{ ucfirst($image['product_status']) }} @endif
@endforeach
@else

No media found

@if($search) No results for "{{ $search }}". Try another search or clear filters. @else Upload images while creating products or use the upload form above. @endif

Start Uploading
@endif
@if($images->hasPages()) @endif
Storage Overview
Usage, stats, and recent uploads
Asset Storage
Used: {{ $stats['storage_used'] }} Limit: {{ $stats['storage_limit'] }}
{{ $stats['total_images'] }} Total Assets
WebP Auto Format
Breakdown
Product Images {{ $stats['product_images'] }}
Gallery Images {{ $stats['gallery_images'] }}
Carousel Slides {{ $stats['carousel_images'] }}
Shop Branding {{ $stats['shop_images'] }}
Recent Uploads
@forelse($recentUploads as $upload)
@if($upload['url']) @else @endif
{{ $upload['product_name'] }}
{{ $upload['type_label'] }} · {{ $upload['sort_at']?->diffForHumans() }}
@empty
No uploads yet.
@endforelse
Optimization
  • Images are resized to 800×800 max
  • Saved as WebP for faster loading
  • Optional SKU watermark on product photos
@endsection