PHPackages                             tentapress/media - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Image &amp; Media](/categories/media)
4. /
5. tentapress/media

ActiveLibrary[Image &amp; Media](/categories/media)

tentapress/media
================

v0.9.14(3mo ago)01607MITPHPPHP ^8.2

Since Jan 29Pushed 3mo agoCompare

[ Source](https://github.com/tentaplane/plugin-media)[ Packagist](https://packagist.org/packages/tentapress/media)[ RSS](/packages/tentapress-media/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (4)Versions (20)Used By (7)

Media
=====

[](#media)

Upload and manage media files for TentaPress.

Plugin Details
--------------

[](#plugin-details)

FieldValueID`tentapress/media`Version0.9.13Provider`TentaPress\Media\MediaServiceProvider`Goal
----

[](#goal)

Provide a first-party media library for uploads, management, and reuse across Pages/Posts/Blocks/SEO.

Scope (v1)
----------

[](#scope-v1)

- Upload + browse media assets (images + generic files).
- Stock library import (via enabled provider plugins).
- Attribution metadata stored with assets.
- Basic metadata: title, alt text, caption, mime type, size, dimensions.
- Simple library with search (no folders).
- Permissions via `manage_media` capability.

Features
--------

[](#features)

- Upload images and files
- Media library browser + stock library search
- Alt text and captions
- Stock library import + attribution (provider plugins)
- Async stock imports with multi-select bulk add
- Imported stock items are marked in-place without inline notices
- Saved media view preference now applies before render to avoid list/grid flash
- Pagination controls in both list and grid media views (top + bottom) with clearer disabled/active states
- Media previews in list and grid are clickable and open the edit screen
- Edit media screen uses a true 50/50 desktop split with details first and actions directly under the form
- Edit media details now list built variants with preview links and rebuild buttons
- Edit media image previews (main + variants) open in a fullscreen modal
- Local image ingest clamp (`2048x2048`) with resize-to-original
- Generated local image variants (`thumb`, `medium`, `large`) with preview-first admin rendering
- Media maintenance commands for optimize/backfill/verification workflows
- Optimization status badges in media index and details
- Media selector for pages, posts, blocks, SEO
- Frontend media reference resolver (ID/URL) for variant-aware image delivery

Dependencies
------------

[](#dependencies)

- `tentapress/users`

Data model
----------

[](#data-model)

- `tp_media`
    - `id`
    - `title` (nullable)
    - `alt_text` (nullable)
    - `caption` (nullable)
    - `disk` (default `public`)
    - `path` (unique)
    - `original_name` (nullable)
    - `mime_type` (nullable)
    - `size` (nullable)
    - `width`, `height` (nullable)
    - `source_width`, `source_height` (nullable pre-clamp dimensions)
    - `variants` (nullable JSON derivative metadata)
    - `preview_variant` (nullable)
    - `optimization_status` (nullable)
    - `optimization_error` (nullable)
    - `source` (nullable)
    - `source_item_id` (nullable)
    - `source_url` (nullable)
    - `license` (nullable)
    - `license_url` (nullable)
    - `attribution` (nullable)
    - `attribution_html` (nullable)
    - `stock_meta` (nullable)
    - `created_by`, `updated_by`
    - timestamps

Admin Menu
----------

[](#admin-menu)

LabelRouteCapabilityIconPositionMedia`tp.media.index``manage_media`image35Admin UI (current)
------------------

[](#admin-ui-current)

- Media index: grid + list with previews, type, size, actions, and styled pagination links at top and bottom.
- Upload screen: file upload + metadata fields.
- Edit screen: 50/50 desktop split with details on the left and metadata form + actions on the right.
- Edit details panel: built variants table with per-variant and rebuild-all actions.
- Edit details previews: open original/variant images in a fullscreen modal.
- Stock library: available only when at least one stock provider plugin is enabled in plugin state.
- Optimizations: available only when at least one optimization provider plugin is enabled in plugin state.
- Active optimization service selector: only enabled optimization plugins are listed.

Storage
-------

[](#storage)

- Uses Laravel filesystem; default disk `public`.
- Oversized image uploads are clamped to `2048x2048` and stored as canonical original.
- Local image variants are generated for preview/delivery defaults:
    - `thumb` (320w)
    - `medium` (768w)
    - `large` (1600w)

Integrations (current)
----------------------

[](#integrations-current)

- Blocks: image + gallery blocks use the media selector.
- Posts/Pages: featured image selection via media picker.
- SEO: OG image selector uses the media library.

Open questions
--------------

[](#open-questions)

- Should we add folders/collections later?
- Should uploads be restricted by role or file type?

Configuration
-------------

[](#configuration)

Media URL driver configured in `config/tentapress.php`:

```
'media' => [
    'url_driver' => env('TP_MEDIA_URL_DRIVER', 'local'),
],
```

Development
-----------

[](#development)

```
php artisan tp:plugins sync
php artisan tp:plugins enable tentapress/media
composer test
composer test:filter -- MediaBaselineFlowTest
```

Commands
--------

[](#commands)

```
php artisan tp:media:optimise --limit=200
php artisan tp:media:backfill-variants --limit=200
php artisan tp:media:verify-variants --limit=500
```

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance80

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Recently: every ~9 days

Total

19

Last Release

105d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/576413?v=4)[Chris Southam](/maintainers/csoutham)[@csoutham](https://github.com/csoutham)

---

Top Contributors

[![csoutham](https://avatars.githubusercontent.com/u/576413?v=4)](https://github.com/csoutham "csoutham (42 commits)")

### Embed Badge

![Health badge](/badges/tentapress-media/health.svg)

```
[![Health](https://phpackages.com/badges/tentapress-media/health.svg)](https://phpackages.com/packages/tentapress-media)
```

###  Alternatives

[goat1000/svggraph

Generates SVG graphs

135911.1k3](/packages/goat1000-svggraph)[gravatarphp/gravatar

Gravatar URL builder which is most commonly called as a Gravatar library

16653.6k2](/packages/gravatarphp-gravatar)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
