oronts / asset-pilot-bundle
Intelligent rule-based asset organization engine for Pimcore 12 with expression language conditions, pluggable strategies, async processing, and Studio UI integration.
Package info
github.com/oronts/pimcore-asset-pilot-bundle
Type:pimcore-bundle
pkg:composer/oronts/asset-pilot-bundle
Requires
- php: >=8.4
- pimcore/pimcore: ^12.0
- pimcore/studio-backend-bundle: >=0.15 <1.0 || ^1.0 || >=2025.4 <2027.0
- pimcore/studio-ui-bundle: >=0.15 <1.0 || ^1.0 || >=2025.4 <2027.0
- symfony/expression-language: ^7.0
- symfony/lock: ^7.3
- symfony/messenger: ^7.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.50
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2026-06-21 18:16:30 UTC
README
oronts/asset-pilot-bundle — intelligent rule-based asset organization for Pimcore 12
Quick start • Example • Documentation • Full docs
Asset Pilot automates how Pimcore assets are filed. When a DataObject is saved, it evaluates the object's asset fields against a priority-ordered rule set, resolves a target path from a Twig template, and moves the files into a structured folder hierarchy, handling localized fields, async processing, a full audit trail, and a Studio UI dashboard.
Features
- Rule engine — priority-ordered rules with class and field targeting, ExpressionLanguage conditions, and type/size/extension filters.
- Twig target paths — full Twig templates with custom filters and functions, and per-locale paths for localized fields.
- Safe under async — Symfony Messenger + Lock, a loop guard, transport deduplication, and an already-at-target skip keep the move pipeline idempotent.
- Audit & revert — every move is logged with source, target, duration, and trigger; CSV export and a loop-guarded revert are built in.
- Unused-asset cleanup — confidence-scored detection with bulk delete or archive, and per-asset or per-folder protection.
- Studio UI — a tabbed React dashboard (Dashboard, Rules, Operations, Audit, Unused, Duplicates, Integrity, Quarantine, Storage, Empty Folders, Drift, Asset Management) mounted in Pimcore Studio via Module Federation.
- Built to extend — an interface behind every seam (a service tag or a replaceable alias), plus a typed event on every mutation. See Extending and Overriding.
Quick Start
composer require oronts/asset-pilot-bundle
Enable the bundle in config/bundles.php:
return [ // ... Oronts\AssetPilotBundle\OrontsAssetPilotBundle::class => ['all' => true], ];
Install the database table and permissions, then build the Studio UI:
bin/console pimcore:bundle:install OrontsAssetPilotBundle
# Studio UI ships as source (Module Federation remote), not prebuilt
npm --prefix assets/studio ci
npm --prefix assets/studio run build
bin/console assets:install
bin/console cache:clear
Full setup, including the required Messenger and Lock configuration for async deduplication, is in docs/installation.md.
Example
Organize product images into a folder named by item number:
oronts_asset_pilot: rules: product_images: class: Product fields: [images, galleryImages] condition: 'object.getItemNumber() != null' target_path: '/Products/{{ object.getItemNumber() }}/Images' strategy: always priority: 100 filters: types: [image] extensions: [jpg, png, webp]
Preview the moves, then run them:
bin/console asset-pilot:organize --class=Product --dry-run bin/console asset-pilot:organize --class=Product --async --batch-size=100
More recipes (category hierarchies, multi-class setups, move strategies, asset protection, date-based organization) are in docs/scenarios.md.
Documentation
Everything lives in docs/.
- Getting started — Installation · Usage · Configuration · Scenarios
- Reference — Reference · Commands · REST API · Path Templates · Conditions · Permissions · Studio UI · Architecture
- Extending & overriding — Developer Experience · Extending · Overriding · Testing
Requirements
| Dependency | Version |
|---|---|
| PHP | >= 8.4 |
| Pimcore | ^12.0 |
| Symfony Expression Language | ^7.0 |
| Symfony Messenger | ^7.3 |
| Symfony Lock | ^7.3 |
Contributing
Issues and pull requests are welcome. See CONTRIBUTING.md for the dev setup, the quality gates, and what a mergeable change looks like.
License
Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0), the same license as Pimcore. Use, modify, and distribute it in private and commercial projects; if you distribute a modified version or run it as a service, your modifications must be available under the same license.
Built and maintained by Oronts
Asset Pilot is built and maintained by Oronts, an AI-first software company in Munich. We design and run commerce platforms, PIM and DAM systems, and the data automation around them for mid-market and enterprise teams, with Pimcore experience spanning versions 10, 11, and 12. This bundle is the asset-filing engine we run on our own client platforms; it is hardened in production and released as open source under AGPL-3.0. Use it freely. When you want it shaped to your data model or backed by an SLA, that is the work we do.
Where we help:
- Production rollout. Installation, rule design for your class and field model, async and multi-pod tuning, and migrating a messy asset tree into a clean, predictable structure without downtime.
- Custom extensions. Merge strategies, integrity checkers, condition functions, path-template context, notifiers, and rule providers, each behind a documented seam so your logic stays out of the core and survives upgrades.
- The platform around it. Pimcore and DataHub integrations, PIM and DAM rollouts, headless commerce, search on OpenSearch or MeiliSearch, and AI-assisted enrichment and classification.
- Support and SLAs. Code review, version upgrades, performance work, and on-call cover for business-critical Pimcore systems.
If your team files assets by hand, fights duplicates, or runs a DAM nobody trusts, we fix the workflow and the platform underneath it. Tell us what you run and we will scope it.
Contact: office@oronts.com · oronts.com
Author: Refaat Al Ktifan (Refaat@alktifan.com)
