Home / Changelog

Changelog

Filikod changelog: what changed in each version

Every release of the WordPress alt text audit plugin, newest first, with the note published on WordPress.org.

Filikod 1.2.0 is the current version, released on 21 September 2026 and tested up to WordPress 7.1.1. This page mirrors the changelog of the plugin on WordPress.org: fixes, security changes and new detection rules, dated. Updates install from your WordPress dashboard like any other plugin, and every version stays free.

1.2.0

current version, released 21 September 2026

16

releases since December 2025

7.1.1

latest WordPress version tested

5/5

rating on WordPress.org, 5 reviews

All versions

Each entry is the note shipped with the release. Tags tell you at a glance whether a line adds something, fixes something or hardens security; version numbers are links you can share.

1.2.0 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.0

Version 1.2.0 Current version

  • NewDuplicate image detection (Filikod > Duplicates) Filikod now fingerprints the original file of every image (md5, stored in the _filikod_file_hash post meta) and lists every group of exact copies uploaded more than once. Same layout as the ALT Audit: each copy shows its thumbnail, file name (with ID, dimensions, size and upload date), Context (where it is used), its ALT text, a Reference / Duplicate status (the reference being the oldest copy) and Edit / Library links. Groups are separated by a header line with the space that keeping a single copy would free. The scan controls sit at the top of the page. Fingerprints are computed automatically on upload and whenever the attachment metadata is regenerated (WordPress big-image scaling, Filikod resizer, image editor, Enable Media Replace, thumbnail regeneration), always from the original file when WordPress kept one, and back-filled for the existing library by a batched Scan library job (25 images per request, same engine as the other bulk jobs). Full rescan recomputes everything, for files replaced outside WordPress. Detection only: nothing is deleted or merged. Groups are cached for 15 minutes (filikod_duplicate_groups_v1) and invalidated on upload, deletion and fingerprint change. Perceptual near-duplicates (resized or re-encoded variants) are out of scope for this version.
  • NewDuplicate markers in the Media Library. Once the library is scanned, every member of a duplicate group gets a red Duplicate file badge in the grid (under the ALT badges) and a Duplicate warning box in the attachment details, after the ALT Status field, listing every copy of the group (file name, ID, upload date, “oldest” and “this file” markers) with a single link to Filikod > Duplicates, so you never bounce from one image to another. Data travels through wp_prepare_attachment_for_js (filikod_duplicate_of), resolved from the cached groups (no extra query per thumbnail).
  • NewDuplicate Upload Alert (on by default, switch in Settings > Optimizations) A dismissible notice in the uploader the moment an uploaded image carries the same fingerprint as an existing file, naming the older copy with a link. Hooks the wp.Uploader queue, so it works in the Media Library and in every editor media frame. Uploads are never blocked. New option filikod_duplicate_upload_alert (default yes), removed on uninstall.
  • ImprovedTranslations are not duplicates. Attachments linked as translations of each other count as one file in the duplicate groups, so a media translated in three languages is not a group of three. Supported: Polylang / Polylang Pro (post_translations), WPML with Media Translation (post_attachment element type), Bogo (_original_post meta). Groups are recomputed when translation links change. Unlinked copies are listed with their language (FR, EN…) on the Duplicates page and in the attachment details. Weglot, GTranslate, TranslatePress, WPGlobus and MultilingualPress need nothing: they never create a second attachment for the same file on the same site.
  • FixedALT Audit covers every language on WPML and Polylang sites. The attachment query behind the audit went through the admin language filter of WPML and Polylang, so on a site whose admin language switcher was set to one language, images of the other languages were missing from the audit and the score. The query now bypasses those filters (suppress_filters), matching the SQL counters used everywhere else in the plugin.
  • FixedDuplicated ALT and media translations. The FR, EN and ES versions of one media (WPML Media Translation, Polylang media translation, Bogo) carrying the same ALT were reported as three duplicated ALTs. A translation set now counts as a single image for the duplicated-ALT rule, with or without a fingerprint scan. The translation map is loaded with one query per request (icl_translations, post_translations, _original_post), so large libraries are not slowed down. Duplicate index bumped to filikod_alt_norm_counts_v3.
  • ImprovedSVG and ICO are fingerprinted too, broken attachments are reported. The scan covers every image/* attachment by MIME type, so SVG logos (the most duplicated files on many sites) are detected. Attachments whose file is missing on disk are marked (x:missing) instead of being counted as “still waiting” forever; the scan block reports them and a Missing files tab lists them (expected path, context, ALT, links) so you can restore the file or delete the attachment; “Scan library” skips them and “Full rescan” retries them.
  • NewDuplicate images. New Library Overview counter with the number of redundant files, duplicate groups and wasted disk space, linking to the Duplicates page (or inviting you to run the first scan).
  • ImprovedIdentical files no longer count as Duplicated ALT. The same ALT text on two copies of the same file was reported as duplicated ALT and lowered the score, although it was a duplicate file, not an ALT mistake. Duplicate detection now counts distinct files (by fingerprint) per ALT text, so exact copies sharing one ALT are excluded, everywhere: ALT Audit tabs, Dashboard counters, Media Library badges and the live preview in the attachment modal. Images that have not been fingerprinted keep the previous behaviour. Audit cache bumped to filikod_alt_audit_v6, duplicate index to filikod_alt_norm_counts_v2.
  • ImprovedTitle counter. The Remove Title Attribute card now shows how many images in the library still carry a title, so you see what the option will clear before enabling it. The counter refreshes after Process Existing Images.
  • CompatibilityWordPress 7.1.1. Code audit against the 7.1.1 security and maintenance release (17 Core fixes, 11 security fixes, revised files in wp-admin/includes/media.php, ajax-actions.php, plugin.php, post.php, formatting.php, HTML API, REST comments, XML-RPC). The attachment finalize fix (#66056) and the media/AJAX changes do not alter the hooks Filikod relies on (attachment_fields_to_edit, attachment_fields_to_save, wp_prepare_attachment_for_js, add_attachment, wp_update_attachment_metadata, wp_check_filetype_and_ext). No incompatibility found.
  • InternalUninstall. The _filikod_file_hash fingerprints (plugin cache, no editorial value) are removed on uninstall, on every site of a multisite network.
  • InternalPublic API. New class Filikod_Duplicates (compute_hash(), hash_attachment(), get_hash(), identity_for_attachment(), get_groups_data(), get_summary()), new helper Filikod_Alt_Audit::counts_from_identity_map(), new helper Filikod_Media_Utils::count_images_with_title(). build_duplicate_map() and build_duplicate_map_with_alt_override() keep their signature and return type.

Version 1.1.5

  • CompatibilityWordPress 7.1. Full code audit against WordPress 7.1 (hooks, AJAX endpoints, Settings API, Media Library integration, PHP 8 patterns), already running on several 7.1 sites without issues. No incompatibility found; “Tested up to” bumped to 7.1 in the readme and the plugin header.
  • InternalPlugin Check compliance. Resolved every warning reported by the official Plugin Check tool. Placeholder index.php files carried mixed line endings (multiple carriage returns per line, inherited from repeated CRLF conversions) and are now normalized to LF. Three phpcs annotations were separated from their target line by a blank line, which made them inoperative; they now sit next to the code they document (the two WP_DEBUG-gated error_log() calls in the SVG upload path and the direct database query used for batch image processing — all intentional and unchanged). No functional change.
  • DocsDocumentation. The 1.1.3 and 1.1.1 upgrade notices were shortened to fit the 300-character limit.

Version 1.1.4

  • FixedDeleted media no longer linger in the ALT Audit table. The audit results are cached for 15 minutes, and the cache was only invalidated when an ALT text changed — not when a media file was added to or deleted from the library. Images deleted from the Media Library could therefore keep showing up in the ALT Audit tabs (typically under Missing) until the cache expired, and on hosts with a persistent object cache they could linger even longer. The audit cache is now invalidated on add_attachment and delete_attachment, and as a safety net the audit table also skips any attachment that no longer exists when rendering the current page. Thanks to Patrick for the report.

Version 1.1.3

  • NewFilename-like single words. An ALT made of a single word containing digits (e.g. “Rggx5025”, “P1040233”, “A7R04512”) is now flagged as Generic. These values are camera or export filenames inherited as ALT text and carry no descriptive value, but random character strings could not be caught by the existing known-prefix patterns (IMG_, DSC_, …) and slipped through as Alt: OK. Detection applies everywhere: ALT Audit tabs, Dashboard counters, and Media Library badges (list, grid, attachment details). The audit cache is bumped to filikod_alt_audit_v5 so the new rule applies on first load after update.
  • FixedICO uploads no longer blocked. Enabling the ICO file type in Settings > File types now actually allows .ico uploads. WordPress performs a second MIME check against the real file content, and PHP detects .ico files as image/vnd.microsoft.icon (not the declared image/x-icon), so uploads were rejected “for security reasons” even with the option enabled. A dedicated wp_check_filetype_and_ext handler now accepts the real-world ICO MIME variants, including PNG-based favicons renamed to .ico.
  • FixedSVG sanitizer no longer strips viewBox, gradients and clip paths. Element and attribute names were lowercased before being compared to a case-sensitive whitelist containing camelCase entries. As a result, viewBox, preserveAspectRatio, <linearGradient>, <radialGradient> and <clipPath> were removed from every sanitized SVG, breaking responsive scaling and visual rendering. Both sides of the comparison are now normalized, and gradient presentation attributes (offset, stop-color, stop-opacity, gradientUnits, gradientTransform, spreadMethod) are now whitelisted so preserved gradients actually render. The security posture (script/event-handler/external-reference removal) is unchanged.
  • SecuritySideloaded SVG files are now sanitized. The SVG sanitization chain only covered regular uploads (wp_handle_upload). Files brought in through sideloading (media_sideload_image(), the WordPress importer, third-party plugins) bypassed sanitization entirely. The wp_handle_sideload_prefilter and wp_handle_sideload hooks now run the exact same validation and sanitization chain.
  • FixedThe filikod-resized image size is now registered. It was hooked on after_setup_theme, which fires before the plugin’s classes are instantiated on init, so the registration never ran. The size announced for page builders (Elementor, Gutenberg) now actually exists.
  • InternalShared media utilities. The image-count query (previously duplicated in three classes) and the file-size formatter (duplicated in two) are now centralized in a single Filikod_Media_Utils class. No behavior change.

Version 1.1.2

  • SecuritySVGZ removed from optional file types. Compressed SVG files (.svgz) could bypass the SVG sanitization chain, which only processes uncompressed .svg uploads. The SVGZ option has been removed from Settings > File types; sites that had it enabled will no longer accept .svgz uploads. Regular .svg uploads are unaffected and remain fully sanitized. If you previously uploaded .svgz files, we recommend reviewing them and re-uploading as standard .svg.
  • DocsImage files FAQ. The “Does Filikod modify my image files?” answer now explicitly states that the optional Automatic Image Resizing feature (disabled by default) replaces the original file with the resized version and is not reversible. All ALT features remain meta-only and never touch image files.

Version 1.1.1

  • NewAI-generated image detection (Generic ALT) ALT text inherited from default AI export filenames is now flagged as Generic in the audit. Two new universal patterns cover the most common cases:
    – Gemini_Generated_Image_* → e.g. “Gemini Generated Image i90nz7i90nz7”
    – ChatGPT Image * → e.g. “ChatGPT Image Jul 7, 2024 at 02_30_00 PM”
    These ALT values look meaningful but carry zero accessibility or SEO value, so Filikod now surfaces them in the Generic tab of the ALT Audit and in the Alt: Generic badge across the Media Library (list, grid, attachment details). Detection is applied to the normalized ALT, so casing, underscores, dashes and dates do not bypass the rule.
  • InternalAudit cache. Transient bumped to filikod_alt_audit_v4 so the new detection rule applies immediately on first load after update; previous v3 (and earlier) transients are explicitly cleared by invalidate_cache().
  • PerformanceDashboard media stats. The Dashboard counters (total images, total size, optimized count, original/optimized size) are now computed in a single batched loop and cached for 15 minutes (filikod_media_size_stats_v1). The cache is auto-invalidated on attachment add/delete and after each automatic resize, removing repeated heavy queries on every Dashboard page load.
  • SecurityALT save endpoint. The AJAX endpoint filikod_save_alt now checks current_user_can( 'edit_post', $attachment_id ) per attachment, verifies that the target is an actual image (wp_attachment_is_image()), and truncates ALT text longer than 1000 characters before saving.
  • AccessibilitySVG sanitizer. The strict SVG whitelist now allows <title>, <desc> and accessibility attributes (role, aria-label, aria-labelledby, aria-describedby, aria-hidden, tabindex, preserveAspectRatio). These elements are non-executable and required for WCAG-compliant inline SVG; the security posture against scripts, event handlers and external references is unchanged.
  • ImprovedSettings UX. The Maximum image width setting now displays an explicit admin error notice when a value outside the supported range (100–10000 px) is submitted, instead of silently rejecting the input.
  • InternalMultisite hygiene. The uninstall routine now also deletes per-site Filikod transients (_transient_filikod_* and their timeouts) on every sub-site of a multisite network, preventing orphaned cache entries after plugin removal.
  • InternalProduction log hygiene. Non-critical error_log() calls in the SVG sanitization and image resizer paths are now gated behind WP_DEBUG, avoiding noise in production debug.log files.
  • InternalCode cleanup. Removed two dead-code paths (no-op rewrite-rule flush on init; SVG security headers hook that never fired because static SVG files bypass template_redirect). No user-visible behavior change.

Version 1.1.0

  • ImprovedDetailed badge tooltips. Every ALT badge (list view, grid overlay, modal, ALT Audit Issue column) now exposes a contextual title tooltip explaining the status and the recommended action (e.g. “ALT text exceeds 125 characters. Long ALTs are poorly read by screen readers and dilute SEO signals…”). Tooltips are translatable and parameterized with the actual character thresholds. A dotted underline (cursor: help) signals the tooltip on the Issue label
  • NewNew issue: Too long ALT. Detection of ALT text exceeding 125 characters (after normalization). Dedicated tab on the ALT Audit page, dedicated count on the Dashboard, dedicated Alt: Too long badge in the Media Library (list, grid, modal). Score impact: 70/100 (reported but less critical than duplicate, generic, too short, or missing)
  • NewDecorative action. Mark an image as decorative (intentional alt="" per WCAG). Decorative images are fully excluded from the ALT score (neither numerator nor denominator) so logos, dividers and purely visual icons stop dragging your score down. Dedicated Decorative column on the ALT Audit page with a toggle switch that auto-saves on change; dedicated Decorative tab to review and revert; dedicated Alt: Decorative badge in the Media Library
  • ImprovedALT Audit UI. Decorative action moved out of the Action column into its own column with a toggle switch (auto-save on change, keyboard-accessible). The Action column now only holds the Save button for a cleaner row layout
  • ImprovedBadge colors refresh. New palette for the Media Library ALT Status badges. Alt: Generic in amber (#FFC736) and Alt: Too short in teal (#0DBB9C) for clearer visual differentiation
  • ImprovedDashboard. Two new counters, Too long and Decorative, both linking to the matching ALT Audit tab
  • InternalAudit cache. Transient bumped to filikod_alt_audit_v3 (auto-rebuilt on first load); invalidation hooks now also listen to the new _filikod_decorative post meta
  • InternalI18n. New translatable strings (Too long, Decorative, Marked as decorative., Image restored as a regular image, please add an ALT text., “too long” description with parameterized character threshold)
  • InternalPublic API. New helpers Filikod_Alt_Audit::is_decorative(), Filikod_Alt_Audit::set_decorative(), new constants TOO_LONG_MIN_LEN, META_DECORATIVE, AUDIT_TRANSIENT
  • InternalBackwards compatibility. Existing audit results still load; collect_alt_issue_codes() gains an optional fourth parameter $is_decorative defaulting to false

Version 1.0.9

  • ImprovedALT Status labels. Badges in the native Media Library (list, grid, attachment details) now use an Alt: prefix on every status (e.g. Alt: OK, Alt: Duplicated, Alt: Missing) via a translatable Alt: %s string
  • ImprovedOK badge. Removed the checkmark character; the passing state reads Alt: OK
  • ImprovedAttachment details modal. New stylesheet media-modal-alt-status.css enqueued after media-views (wp_enqueue_media) so the ALT Status label stays aligned with other field labels and with the badges, including under the 900px responsive rules
  • DocsReadme. Description, screenshots captions, and changelog aligned with the above

Version 1.0.8

  • NewNative Media Library. ALT Status column in list view; badge overlay on grid thumbnails (top-left); ALT Status field in attachment details modal/sidebar
  • ImprovedModal UX. ALT Status label aligned with badges; multiple issue badges on one horizontal row in attachment details (list column still stacks badges for readability)
  • ImprovedLive updates. Status refreshes after saving ALT text (AJAX save handlers) and while typing (server-side preview); dashboard and audit cache stay in sync when _wp_attachment_image_alt changes
  • ImprovedMulti-issue badges. An image can show several tags at once (e.g. Generic + Too short + Duplicated) when multiple rules apply; single green Alt: OK when there are no issues
  • ImprovedReliability. Audit transient cache key bumped (filikod_alt_audit_v2); normalized cache keys for object caches; attachment_fields_to_save ensures image_alt is persisted on save-attachment-compat like the classic uploader; invalidation hooks on post meta, attachment save, and related paths
  • PerformancePerformance. Cached global map of normalized ALT → occurrence count (filikod_alt_norm_counts_v1); duplicate preview in the media modal avoids scanning every attachment per request; full audit rebuild reuses that index
  • ImprovedAdmin JS. Shared batch runner for accessibility and bulk jobs (runFilikodBatchedJob)
  • DocsDocumentation. FAQ and feature list updated; default behavior is ALT meta only, no image file changes

Version 1.0.7

  • FixedAccessibility: “Remove Title Attribute” now works for new uploads (clears post_title after use); execution order enforced: generate ALT (from title then filename) → clean special chars → remove title (same order in bulk process)
  • ImprovedALT Audit page: Duplicated tab lists media sorted alphabetically by ALT so duplicates are grouped; saving an ALT in Duplicated tab reloads the list so media that are no longer duplicated disappear
  • SecuritySecurity & coding standards: escaped outputs (menu icon via wp_localize_script; pagination printf), all variables in ALT audit view prefixed with filikod_ (PrefixAllGlobals)

Version 1.0.6

  • DocsReadme and positioning update: ALT audit & bulk management first
  • DocsClarified automation messaging (optional, controlled)
  • ImprovedImproved “Generic ALT” detection with additional real-world patterns (e.g. device/app filenames, placeholders, thumbnails)
  • ImprovedReduced false positives in generic ALT classification (better normalization and matching)

Version 1.0.5

  • NewAdded content context column in ALT audit (see where each image is used)
  • ImprovedImproved bulk ALT editing workflow
  • ImprovedEnhanced admin interface clarity

Version 1.0.4

  • FixedFix audit score calculation
  • DocsAdjusted description text

Version 1.0.3

  • NewDashboard redesign with ALT Quality Score (0–100%)
  • NewMulti-language generic ALT detection
  • NewDonut gauge visualization for ALT Score
  • NewMedia Size Savings module and progress bars
  • ImprovedNew audit utilities and filters

Version 1.0.2

  • ImprovedImproved dashboard readability
  • NewAdded ALT coverage percentage
  • DocsClarified resize behavior messaging

Version 1.0.0

  • NewInitial public release
  • NewALT automation (filename-based)
  • NewTitle removal & character cleanup
  • NewBulk processing for existing images
  • SecuritySecure SVG sanitization
  • NewOptional extended file types
  • NewModern tab-based dashboard

Running an older version?

Updates are free and take one click from Dashboard › Updates. Not installed yet? Filikod scans your whole media library and scores your alt text in minutes.