Search by

semitexa / media

syntaxwanderer

Semitexa Media — image-first media asset management with async variants, tenant-aware quotas, and CDN-ready delivery URLs

Package info

github.com/semitexa/semitexa-media

Type:semitexa-module

pkg:composer/semitexa/media

Statistics

Installs: 394

Dependents: 2

Suggesters: 0

Stars: 0

Open Issues: 0

2026.10.08.0620 2026-10-08 09:16 UTC

README

Image-first media asset management with async variant generation, tenant-aware quotas, and CDN-ready delivery URLs.

Install

Included in every project created by the installer (https://semitexa.com/install.sh).

Purpose

Manages media assets from upload through processing to delivery. Provides canonical asset records, metadata extraction (EXIF, dimensions), named collections, async variant generation (thumbnails, WebP, quality presets), and per-tenant quota tracking.

Role in Semitexa

Depends on Core, ORM, Storage, and Tenancy. Variants are generated by the media:work queue worker (or inline by media:drain). Storage provides the underlying driver (local or S3/MinIO), while ORM persists asset records and quota usage.

Key Features

  • ImagickImageProcessor for image inspection and transformation
  • Async variant generation via the media:work worker
  • Named collections for logical asset grouping
  • WebP/JPEG quality presets
  • Per-tenant quota tracking and enforcement
  • CDN-ready delivery URL generation
  • ORM-backed asset records (MediaAssetResource, MediaVariantResource, MediaQuotaUsageResource)
  • CLI commands: media:work, media:import, media:drain, media:regenerate, media:failed-variants, media:quota:recalculate
  • Bulk backfill: media:import <dir> -c <collection> --tenant <id> ingests pre-existing files (legacy CMS uploads) with sha256 dedup, --dry-run, --ext filter, and resumable --limit batches
  • Broker-less generation: media:drain claims queued variants straight from the database and transforms them inline — no queue broker needed; media:import --sync does the same right after ingest

Notes

Requires the ext-imagick PHP extension. Variant generation runs asynchronously in a dedicated worker, bin/semitexa media:work [transport] [queue], which does not start with the web server; broker-less setups can use media:drain / media:import --sync instead.

On Alpine images, ImageMagick format coders ship as separate packages — install imagemagick-webp imagemagick-jpeg imagemagick-heic alongside imagemagick-dev, otherwise webp/jpeg variant generation fails with "Unable to set image format" (the Semitexa scaffold Dockerfile does this since 2026-07-22).