asignua/filament-image-annotations
A Filament plugin for annotating images directly in your admin panel. Add drawing and marking tools to image fields, making it easy to highlight areas, add notes, and manage annotated uploads in Laravel Filament apps.
x-ref="image", sized by data-aspect, cropped by data-fit="cover", non-interactive pins via data-interactive="false") means marks can be layered onto a picture produced by any other component — chat thumbnails, avatars, CDN-transformed images, third-party widgets. This unlocks use cases that previously required a bespoke overlay: annotating chat attachments, flagging regions on user-uploaded photos, pinning defects on product imagery, marking up screenshots in a support thread.data-interactive="false" is a small flag with real product weight: it lets you ship read-only annotation views (feeds, previews, shared links) without the viewer swallowing taps meant for the surrounding card or link. That is the difference between "annotations are a page" and "annotations are a detail inside a page."Adopt when:
Look elsewhere when:
Diligence checklist before adopting: confirm the licence and where the Pro boundary sits; confirm annotation data is persisted in a schema you control (not an opaque blob); confirm the overlay mode's coordinate model (data-aspect as height/width) matches how your thumbnails are actually sized; check the changelog for breaking changes across minor versions — this release adds behaviour, but attribute-driven APIs tend to accumulate them.
For executives — one paragraph: Image annotation is a small-sounding feature that reliably costs more than it looks like, because the hard part is not drawing a pin, it is keeping pins in the right place across every image size, crop, device pixel ratio, theme, and container. This package is a maintained Laravel component that has already solved that, and the newest release extends it from "full-size annotated image" to "marks layered over any image we already render" — chat thumbnails, attached photos, list previews. That is the difference between annotation being a standalone screen and annotation being a feature that shows up everywhere in the product. The trade-off is a dependency with a commercial tier: the vendor is clearly building a paid add-on on top of the free core, so we should budget for the possibility of paying for Pro rather than assuming the free package covers us indefinitely.
For engineering — the summary: Blade component, Alpine-driven, attribute-configured. v1.2.0 adds an overlay viewer mode that renders without owning the <img> — you supply data-aspect (height ÷ width) so marks can be positioned against an image you or another component drew, data-fit="cover" to mirror object-fit: cover cropping, and data-interactive="false" for read-only pins that don't steal clicks. Plus editor chrome fixes: framed toolbar, framed tinted stage with shadow, light/dark panel parity.
For engineering — the caveats to raise in review: the overlay mode positions marks by ratio, so it is only as accurate as the aspect ratio you declare — any container that changes the image's effective crop (fixed-height cards, object-position, letterboxing) needs verification. The data-interactive="false" path is the one to test hardest, since it sits inside clickable cards. And since the vendor's own Pro add-on is the first consumer of the overlay API, we should pin a version and read minor release notes rather than floating, in case the API is still settling.
How can I help you explore Laravel packages today?