sybio/gif-frame-extractor
PHP library to extract and split frames from animated GIFs. Read frame durations, colors, dimensions and disposal methods without Imagick, then export frames as separate GIF, JPEG or PNG images for thumbnails, previews or processing.
Architecture fit
vendor/ as a single-purpose class (GifFrameExtractor\GifFrameExtractor) plus an exception type.GifFrameExtractorService), keeping the vendor class out of controllers and jobs. This is the only sane boundary given the library is unmaintained and we may want to swap it later.Integration feasibility
composer require sybio/gif-frame-extractor) and trivial to call: extract(), isAnimated(), getFrames(), getFrameDuration(), getTotalDuration(), saveFrames(). Integration effort is measured in hours, not sprints.Technical risk
Key questions
E_ALL?LICENSE, not the README.isAnimated() correctly reject non-GIF and single-frame GIFs before we do expensive work?Stack fit
ExtractGifFrames) dispatched from the upload/ingest flow, writing to a configured filesystem disk via Laravel's Storage facade.Migration path
gifsicle CLI), run both in shadow mode on a sample corpus and diff frame counts, durations, and perceptual output before cutover.Compatibility
php-imagick and ImageMagick with GIF delegate support. Pin both versions in the Dockerfile; do not float latest.1.2.* or a commit hash). Given abandonment, consider committing a fork to a private VCS rather than relying on Packagist availability.Sequencing
timeout and memory_limit per worker; never extract in a web request.gifsicle/FFmpeg worker.Maintenance
Support
Scaling
memory_limit, so a GIF bomb cannot starve the default queue.Failure modes
retry_after > timeout, worker supervisor restart.GifFrameExtractorException; recoverable if wrapped. Mitigation: catch, mark asset unprocessable, surface to the user.Ramp-up
extract() call; there is nothing to architect around.How can I help you explore Laravel packages today?