semitexa / media
Semitexa Media — image-first media asset management with async variants, tenant-aware quotas, and CDN-ready delivery URLs
Requires
- php: ^8.4
- ext-imagick: *
- semitexa/core: *
- semitexa/orm: *
- semitexa/storage: *
- semitexa/tenancy: *
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-master
- 2026.10.08.0620
- 2026.09.27.0404
- 2026.09.23.1717
- 2026.09.11.1941
- 2026.09.08.2003
- 2026.09.06.0456
- 2026.09.05.1548
- 2026.08.04.2028
- 2026.07.25.0821
- 2026.07.23.0617
- 2026.07.22.1910
- 2026.07.22.1226
- 2026.07.11.0936
- 2026.07.11.0928
- 2026.07.06.1438
- 2026.06.21.0352
- 2026.05.08.1640
- 2026.04.26.0639
- 2026.04.14.1121
- 2026.04.13.0911
- 2026.04.09.1145
- 2026.04.05.0855
- 2026.04.03.1240
- 0.0.6
- 0.0.5
- 0.0.4
- v0.0.3
- dev-develop
This package is auto-updated.
Last update: 2026-10-19 18:08:08 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
ImagickImageProcessorfor image inspection and transformation- Async variant generation via the
media:workworker - 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,--extfilter, and resumable--limitbatches - Broker-less generation:
media:drainclaims queued variants straight from the database and transforms them inline — no queue broker needed;media:import --syncdoes 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).