|
Server : Apache System : Linux s1230 5.15.0-139-generic #149~20.04.1 SMP Tue Jul 14 11:21:49 UTC 2026 x86_64 User : p141464 ( 418825) PHP Version : 7.4.33.12 Disable Function : NONE Directory : /html/relaunch-kmu/wp-content/plugins/imagify/docs/ |
Upload File : |
# Imagify — Complete Technical Summary
> Version 2.2.8 · PHP 7.3+ · WordPress 5.3+
>
> WordPress image optimisation plugin — compression, next-gen formats (WebP / AVIF), and multi-context management.
---
## Table of Contents
1. [Architecture & Bootstrapping](#1-architecture--bootstrapping)
2. [Image Optimisation](#2-image-optimisation)
3. [Next-gen Formats (WebP / AVIF)](#3-next-gen-formats-webp--avif)
4. [Settings & Configuration](#4-settings--configuration)
5. [Bulk Optimisation](#5-bulk-optimisation)
6. [WordPress Media Library Integration](#6-wordpress-media-library-integration)
7. [Custom Folders](#7-custom-folders)
8. [AJAX & Admin-Post Actions](#8-ajax--admin-post-actions)
9. [WP-CLI Commands](#9-wp-cli-commands)
10. [NextGEN Gallery Integration](#10-nextgen-gallery-integration)
11. [Third-Party Integrations](#11-third-party-integrations)
12. [Scheduled Tasks (Cron)](#12-scheduled-tasks-cron)
13. [Developer Hooks & Filters](#13-developer-hooks--filters)
14. [Quota & Account Management](#14-quota--account-management)
15. [Roles & Access Control](#15-roles--access-control)
16. [Troubleshooting Tools](#16-troubleshooting-tools)
---
## 1. Architecture & Bootstrapping
*Source code organisation, service loading, and plugin lifecycle.*
### Entry Point
The plugin starts from `imagify.php`. It defines global constants, includes the Composer autoloader, then hooks the `imagify_init()` function on `plugins_loaded`.
**Key constants**
- `IMAGIFY_VERSION` — plugin version
- `IMAGIFY_PATH` / `IMAGIFY_URL`
- `IMAGIFY_MAX_BYTES` — 5 MB limit per image
- `IMAGIFY_APP_API_URL` — remote API URL
- `IMAGIFY_API_KEY` — override via PHP constant
**Autoloading & DI**
- PSR-4 via Composer (`vendor/autoload.php`)
- Dependency injection: **League Container**
- Providers declared in `config/providers.php`
- Main class: `Imagify\Plugin`
- Final hook: `do_action('imagify_loaded')`
### Registered Service Providers
`User` · `Admin` · `Avif` · `CDN` · `Picture` · `Stats` · `Webp` · `ThirdParty` · `Media` · `Tools`
### Initialisation Sequence
```
// 1. plugins_loaded
imagify_init()
└── include vendor/autoload.php
└── new Imagify\Plugin()
└── load config/providers.php // register services
└── boot Options, Data, Auth
└── boot Auto-Optimization
└── (admin only) boot Settings, Views, Imagifybeat
└── do_action('imagify_loaded')
```
---
## 2. Image Optimisation
*On-the-fly or bulk compression, quality levels, backup management, and resizing.*
### Compression Levels
| Level | Name | Description |
|-------|------|-------------|
| `0` | Normal | Light compression, maximum quality preserved. |
| `1` | Aggressive | Stronger compression, good quality/size trade-off. |
| `2` | Ultra (default) | Maximum compression — recommended for most use cases. |
> All optimisation operations go through the `Imagify\Optimization\File` class, which communicates with the remote Imagify API.
### Automatic Optimisation on Upload
When the `auto_optimize` option is enabled, the `Imagify_Auto_Optimization` class hooks into `wp_generate_attachment_metadata`. Each uploaded image is optimised immediately, along with all its thumbnails.
### Backup System
- Enabled via the `backup` option.
- The original file is copied before any compression.
- Backup directory is filterable via `imagify_backup_directory`.
- Restoring puts the original back in place and removes optimisation metadata.
### Large Image Resizing
- Option `resize_larger`: when enabled, images exceeding `resize_larger_w` pixels wide are resized.
- Default value: **2560 px** (aligned with the WP filter `big_image_size_threshold`).
### Thumbnail Management
All sizes registered in WordPress are optimised. Sizes can be excluded via the `disallowed-sizes` blacklist in the settings.
### Optimisation Statuses
`success` · `already_optimized` · `error` · `pending`
### Metadata Stored Per Attachment
```
// Attachment post meta
_imagify_status // 'success' | 'already_optimized' | 'error' | 'pending'
_imagify_data // JSON — full optimisation results
_imagify_level // Level used (0, 1, 2)
_imagify_next_gen_done // Boolean — next-gen versions generated
```
---
## 3. Next-gen Formats (WebP / AVIF)
*Generation and delivery of modern formats to reduce image weight on the browser side.*
### File Generation
After optimisation, Imagify can generate **WebP** and/or **AVIF** versions of each image. The `optimization_format` option controls this behaviour:
| Value | Behaviour |
|-------|-----------|
| `'off'` | No next-gen format. |
| `'webp'` | Generates WebP only. |
| `'avif'` | Generates WebP + AVIF (AVIF takes priority if supported). |
### Display Method: `<picture>`
Class: `Imagify\Picture\Display`. The plugin starts an output buffer on `template_redirect`, scans the generated HTML, and replaces each `<img>` with a `<picture>` block containing `<source>` elements pointing to the WebP/AVIF files.
```html
<!-- Before -->
<img src="photo.jpg" alt="...">
<!-- After transformation -->
<picture>
<source srcset="photo.avif" type="image/avif">
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" alt="...">
</picture>
```
### Display Method: Server Rewrite
Class: `Imagify\Webp\Display`. Rather than altering the HTML, rules are written directly into `.htaccess` (Apache) or `web.config` (IIS). The server automatically serves WebP if the browser accepts it (`Accept: image/webp`).
**Lazy Load compatibility:** The `data-lazy-src`, `data-src`, `data-srcset`, `data-lazy-srcset` attributes are detected and propagated into the generated `<source>` and `<img>` tags.
**Image exclusion:** An image with the CSS class `imagify-no-webp` is ignored by the `<picture>` transformation.
> **Warning:** the server rewrite method requires the web server to be Apache or IIS and that the configuration files (.htaccess) be writable.
---
## 4. Settings & Configuration
*All options stored in `imagify_settings` (wp_options / wp_sitemeta on multisite).*
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `api_key` | string | `''` | Imagify API key (or the `IMAGIFY_API_KEY` constant). |
| `optimization_level` | int | `2` | Compression level (0, 1, 2). |
| `lossless` | bool | `0` | Lossless compression. |
| `auto_optimize` | bool | `1` | Automatic optimisation on upload. |
| `backup` | bool | `1` | Back up the original before compression. |
| `resize_larger` | bool | `0` | Resize images that are too large. |
| `resize_larger_w` | int | `0` | Maximum width in pixels. |
| `optimization_format` | string | `'webp'` | `'off'`, `'webp'`, or `'avif'`. |
| `display_nextgen_method` | string | `'picture'` | `'picture'` or `'rewrite'`. |
| `cdn_url` | string | `''` | CDN URL for serving media. |
| `disallowed-sizes` | array | `[]` | Thumbnail sizes excluded from optimisation. |
| `admin_bar_menu` | bool | `1` | Show Imagify in the admin bar. |
> The `Imagify_Settings` class handles option registration (`register_setting()`) and validation. It is network-aware: on multisite, network options are stored in `wp_sitemeta`.
---
## 5. Bulk Optimisation
*Batch processing of all existing images, with an asynchronous queue.*
### Bulk Architecture
The `Imagify\Bulk\Bulk` class orchestrates bulk optimisation. It relies on **ActionScheduler** (bundled library) to create asynchronous jobs processed in the background.
| Context | Class | Description |
|---------|-------|-------------|
| WP Media | `Imagify\Bulk\WP` | Optimises all attachments in the WordPress media library that have not yet been optimised. |
| Custom Folders | `Imagify\Bulk\CustomFolders` | Optimises files indexed in the custom folders. |
| NGG | `Imagify\Bulk\NGG` | Optimises images from NextGEN Gallery galleries. |
### Execution Flow
```
// Trigger (UI or CLI)
imagify_bulk_optimize (AJAX) // or wp imagify bulk-optimize
└── Imagify\Bulk\Bulk::run()
└── ActionScheduler::enqueue(imagify_optimize_media)
└── Imagify\Job\MediaOptimization::execute()
└── Imagify\Optimization\File::optimize()
└── Remote Imagify API
```
### Bulk Next-gen Version Generation
The AJAX action `imagify_missing_nextgen_generation` and the ActionScheduler hook `imagify_convert_next_gen` allow generating WebP/AVIF versions for all already-optimised images whose next-gen files are missing.
---
## 6. WordPress Media Library Integration
*Columns, actions, and buttons directly within the WordPress media interface.*
**List view (Media Library)**
- "Imagify" column with status and weight savings.
- Inline action buttons: Optimize, Re-optimize, Restore, Generate next-gen, Delete next-gen.
- "Bulk Optimization" group action.
- Filter by status: `?imagify-status=...` (`optimized`, `unoptimized`, `errors`, `missing-nextgen`).
`missing-nextgen` (list mode only) is applied via `Imagify\Media\Subscriber::filter_missing_nextgen_query()`
on `pre_get_posts`, and shows optimized WP media with no successful next-gen size recorded (mirroring
the predicate used for the "missing next-gen" count).
**Attachment edit page**
- Dedicated metabox with detailed status.
- Individual optimisation buttons.
- Display of savings achieved (KB and %).
- Restore link to the original.
> The WordPress admin bar can also display a shortcut to the Bulk Optimization page, controlled by the `admin_bar_menu` option.
---
## 7. Custom Folders
*Optimisation of image files located outside the WordPress media library.*
Custom folders allow optimising images located anywhere on the server (themes, plugins, custom directories). They are indexed in two dedicated MySQL tables.
| Table | Contents |
|-------|----------|
| `imagify_folders` | Monitored directories, absolute path on the server, scan status |
| `imagify_files` | Individually indexed files, original/optimised size, status, level, generated formats, hash to detect modifications |
### Available Features
- **Scan**: automatic detection of new images in configured folders.
- **Individual or bulk optimisation** via the same ActionScheduler system.
- **Re-optimisation**: if the source file has been modified (detected by hash).
- **Restore** from backup.
- **Cron synchronisation** to detect modified/deleted files.
### Main Classes
```php
// Database access
Imagify_Files_DB // CRUD on wp_imagify_files
Imagify_Folders_DB // CRUD on wp_imagify_folders
Imagify_Files_Scan // Filesystem scan
// Context
Imagify\Context\CustomFolders
```
---
## 8. AJAX & Admin-Post Actions
*All server entry points used by the administration interface.*
> The plugin does not expose a standard WordPress REST API. All actions go through `wp_ajax_*` (authenticated) or `admin_post_*`. A custom "Imagifybeat" system handles real-time updates.
### AJAX Actions (`wp_ajax_*`)
**Account & API**
- `imagify_signup`
- `imagify_check_api_key_validity`
- `imagify_get_user_data`
- `imagify_delete_user_data_cache`
- `imagify_get_prices`
- `imagify_check_coupon`
**Bulk & stats**
- `imagify_bulk_optimize`
- `imagify_missing_nextgen_generation`
- `imagify_bulk_get_stats`
- `imagify_get_folder_type_data`
- `imagify_bulk_info_seen`
- `imagify_get_images_counts`
**UI & settings**
- `imagify_check_backup_dir_is_writable`
- `imagify_get_files_tree`
- `imagify_update_estimate_sizes`
**Tools**
- `imagify_reset_internal_state`
- `imagify_rpc` (Imagifybeat)
### Admin-Post Actions (`admin_post_*`)
**WP Media Library**
- `imagify_manual_optimize`
- `imagify_manual_reoptimize`
- `imagify_optimize_missing_sizes`
- `imagify_generate_nextgen_versions`
- `imagify_delete_nextgen_versions`
- `imagify_restore`
**Custom Folders**
- `imagify_optimize_file`
- `imagify_reoptimize_file`
- `imagify_restore_file`
- `imagify_refresh_file_modified`
- `imagify_scan_custom_folders`
### Imagifybeat
Real-time update system (analogous to WordPress Heartbeat). Hook: `wp_ajax_imagifybeat`. Interface data (nonces, statuses) is refreshed periodically via AJAX polling, configurable by filter.
---
## 9. WP-CLI Commands
*Command-line interface for automating optimisation operations.*
### `wp imagify bulk-optimize`
Launches bulk optimisation for one or more contexts (`wp`, `custom-folders`).
- Option: `--optimization-level`
- Asynchronous execution via ActionScheduler
### `wp imagify restore`
Restores original images for the specified contexts (`library`, `custom-folders`).
- Synchronous (blocking) execution
- Returns: success, errors, total
### `wp imagify generate-missing-nextgen`
Generates missing WebP/AVIF versions for all already-optimised images.
- Useful after enabling a next-gen format
---
## 10. NextGEN Gallery Integration
*Full support for the NextGEN Gallery (NGG) plugin.*
The plugin automatically detects NextGEN Gallery and activates a dedicated context (`Imagify\Context\NGG`).
**Features**
- Optimisation of NGG images (levels 0/1/2)
- WebP / AVIF generation for NGG images
- Restore NGG originals
- Backup before compression
**Interface**
- "Bulk Optimization" page in the NGG menu
- "Imagify" column in "Manage Images"
- Verified compatibility: NGG v4.x (`imagify_ngg_has_pope_storage()`)
---
## 11. Third-Party Integrations
### Plugins
WooCommerce · WP Rocket · Gravity Forms · Formidable Pro · Yoast SEO · AMP · Enable Media Replace · Regenerate Thumbnails · Amazon S3 & CloudFront · Real Media Library · Extendify · Cloudflare Super Page Cache
**WooCommerce detail:** On variable product pages, WooCommerce dynamically replaces the main image. Imagify fixes the `wp-post-image` class on generated `<picture>` tags to maintain compatibility with WooCommerce's image-switching mechanism.
### Hosting Providers
WordPress.com · WP Engine · Flywheel · SiteGround · Pressable
---
## 12. Scheduled Tasks (Cron)
*Recurring jobs for maintenance and statistics.*
| Task | WP Cron Hook | Frequency | Role |
|------|-------------|-----------|------|
| `Imagify_Cron_Rating` | `imagify_rating_event` | Daily (3:00 PM) | Triggers the plugin rating request. |
| `Imagify_Cron_Library_Size` | — | Periodic | Recalculates media library statistics. |
| `Imagify_Cron_Sync_Files` | — | Periodic | Synchronises files in custom folders. |
### ActionScheduler
The ActionScheduler library is bundled in `/inc/Dependencies/ActionScheduler/`. It manages asynchronous optimisation jobs:
- `imagify_optimize_media` — Processes a single optimisation job.
- `imagify_convert_next_gen` — Generates next-gen versions.
All jobs are cleaned up when the plugin is deactivated.
---
## 13. Developer Hooks & Filters
*Extension points for customising the plugin's behaviour.*
### Main Actions
| Hook | When |
|------|------|
| `imagify_loaded` | Plugin fully loaded and ready. |
| `imagify_activation` | On plugin activation. |
| `imagify_deactivation` | On plugin deactivation. |
| `imagify_optimize_media` | ActionScheduler optimisation job. |
| `imagify_convert_next_gen` | Next-gen generation job. |
| `imagify_delete_media` | Deletion of a media item. |
| `imagify_settings_on_save` | After settings are saved. |
| `imagify_not_over_quota_anymore` | Quota dropped back below 100%. |
### Main Filters
| Filter | Usage |
|--------|-------|
| `imagify_backup_directory` | Change the backup folder. |
| `imagify_register_context` | Register a custom optimisation context. |
| `imagify_picture_attributes` | Modify attributes of the `<picture>` tag. |
| `imagify_picture_source_attributes` | Modify attributes of `<source>` tags. |
| `imagify_picture_img_attributes` | Modify attributes of the inner `<img>`. |
| `imagify_allow_picture_tags_for_nextgen` | Disable the `<picture>` transformation. |
| `imagify_buffer` | Filter the final HTML page buffer. |
| `imagify_cdn_source_url` | Override the CDN URL. |
| `imagify_event_recurrence` | Change the frequency of Imagify cron jobs. |
| `imagify_site_root_url` | Override the site root URL used for internal-URL matching (e.g. multisites with domain mapping). |
| `imagify_event_time` | Change the trigger time for cron jobs. |
| `imagify_bulk_stats` | Modify bulk statistics data. |
| `imagify_unoptimized_attachment_limit` | Limit query results. |
---
## 14. Quota & Account Management
*Subscription plans, quota consumption, and user data cache.*
### Available Plans
| Plan | `plan_id` | Description |
|------|----------|-------------|
| **Free** | `1` | Limited monthly quota. Blocked at 100% consumption (`is_over_quota()`). |
| **Growth** | `16` / `18` | Larger monthly quota, additional byte packs available. |
| **Infinite** | `15` / `17` | Unlimited quota — no quota blocking. |
### Data Exposed by `Imagify\User\User`
```
quota // Total monthly quota (MB)
consumed_current_month_quota // Quota consumed this month (MB)
extra_quota // Imagify byte pack (MB)
extra_quota_consumed // Pack consumed (MB)
next_date_update // Quota reset date
is_active // Account active
```
### Cache
User data is cached in a WordPress transient (`imagify_user_cache`) for **5 minutes**. The cache can be manually cleared via the AJAX action `imagify_delete_user_data_cache`.
---
## 15. Roles & Access Control
*WordPress capabilities required for each Imagify action.*
| Action | Required WP Capability | Context |
|--------|----------------------|---------|
| `manage` — Access settings | `manage_options` | All |
| `optimize` — Optimize a media item | `upload_files` | All |
| `bulk-optimize` — Launch a bulk run | `manage_options` | All |
> Capabilities are defined in `Imagify\Context\AbstractContext::get_capacity()` and can be overridden via the standard WordPress filter `option_page_capability_imagify`.
---
## 16. Troubleshooting Tools
*Built-in tools to resolve common issues without technical intervention.*
### Internal State Reset
AJAX action: `imagify_reset_internal_state` (requires the `manage` capability). This one-click tool unblocks the bulk optimiser when it gets stuck in an inconsistent state.
### What Gets Cleaned Up
**Deleted transients**
- `imagify_custom-folders_optimize_running`
- `imagify_wp_optimize_running`
- `imagify_bulk_optimization_complete`
- `imagify_bulk_optimization_result`
- `imagify_missing_next_gen_total`
- `imagify_bulk_optimization_infos`
**Deleted locks & jobs**
- Auto-optimize locks (`_transient_%imagify-auto-optimize-%`)
- RPC locks (`_transient_%imagify_rpc_%`)
- Process locks (`_transient_imagify_%_process_locked`)
- ActionScheduler jobs: `imagify_optimize_media`
- ActionScheduler jobs: `imagify_convert_next_gen`
> The `Imagify\Tools\InternalStateList` class is the single source of truth for all these items — it is also used by `uninstall.php` for a full cleanup on uninstallation.
---
*Imagify v2.2.8 · wp-media/imagify-plugin*