- What does sybio/gif-frame-extractor do?
- sybio/gif-frame-extractor is a single-purpose PHP class that separates an animated GIF into individual frames, exposing frame durations, dimensions, colors, and disposal methods. It also lets you save extracted frames as separate GIF, JPEG, or PNG images. It is framework-agnostic and not a Laravel package, so you call it directly or wrap it in your own service.
- How do I install sybio/gif-frame-extractor with Composer?
- Install it with composer require sybio/gif-frame-extractor; it lands in vendor/ as the GifFrameExtractor class plus an exception type. There is no Laravel service provider or config to publish. In Laravel, you would typically bind a thin wrapper service in a service provider rather than injecting the vendor class into controllers.
- Is sybio/gif-frame-extractor a Laravel package?
- No. It is a framework-agnostic PHP library with no service provider, facade, config, or publishable assets. For Laravel, the recommended boundary is an application-level service such as GifFrameExtractorService that hides the vendor class. This keeps the unmaintained dependency swappable and out of your domain code.
- Does sybio/gif-frame-extractor require the Imagick PHP extension?
- Yes, the technical assessment flags a hard runtime dependency on the Imagick PHP extension and ImageMagick GIF delegates. That is an extension-level constraint on your runtime image, not just a Composer constraint. Verify Imagick availability in every target environment, including shared hosting or restricted PaaS, and have a fallback plan.
- Which PHP and Laravel versions work with sybio/gif-frame-extractor?
- The library is PHP 5.3-era code, and PHP 8 compatibility is unverified, so you must test against your exact PHP minor version (for example 7.4, 8.1, or 8.2) under E_ALL. Because it is framework-agnostic, Laravel version support depends mainly on your PHP version and integration wrapper. There are no Laravel-specific version constraints in the package itself.
- Is sybio/gif-frame-extractor safe for untrusted user-uploaded GIFs?
- Treat user-supplied GIFs as attacker-controlled input. ImageMagick coalesces optimized GIFs into full frames in memory, so a small upload can expand into hundreds of MB and cause an uncatchable OOM. Enforce upload size, pixel-dimension, and frame-count limits before decode, run extraction in a queued job with timeouts, and consider disabling extraction behind a feature flag.
- How do I use sybio/gif-frame-extractor in a Laravel queued job?
- Wrap the library in a service and dispatch an ExtractGifFrames job from your upload flow. The job should validate limits, call extract(), save frames to a configured Laravel Storage disk, and record derived assets for cache invalidation. Set job and process timeouts because extraction is synchronous and in-process, with no async or streaming API.
- Can sybio/gif-frame-extractor save frames as PNG or JPEG and read frame durations?
- Yes. The API exposes extract(), isAnimated(), getFrames(), getFrameDuration(), getTotalDuration(), and saveFrames(), and it can export frames as separate GIF, JPEG, or PNG images. Frame durations are centisecond-quantized with a 10ms floor, so test accuracy claims rather than assuming them. Use the metadata path if you only need frame count and duration and want to avoid expensive image writes.
- What are alternatives to sybio/gif-frame-extractor for GIF frame extraction?
- Alternatives include using Imagick directly with coalesceImages, FFmpeg, gifsicle, or a GD-based custom parser. If you only need frame count and duration, a cheaper metadata-only path may be enough. For Laravel teams, a maintained wrapper or a small in-house adapter around FFmpeg or Imagick is often safer than an unmaintained package.
- Is sybio/gif-frame-extractor maintained and what license is it under?
- It is effectively unmaintained: around 178 GitHub stars, zero Packagist dependents, and no recent meaningful activity, so treat it as vendored code you own. The license is MIT-style, but confirm it from the LICENSE file rather than the README. Pin the version, validate PHP compatibility, and plan a migration path if the library breaks.