Drupal is a registered trademark of Dries Buytaert
Drupal 11.4.2 Update released for Drupal core (11.4.2)! Drupal 11.4.1 Update released for Drupal core (11.4.1)! Drupal 11.4.0 Update released for Drupal core (11.4.0)! Drupal 10.6.12 Update released for Drupal core (10.6.12)! Drupal 11.3.13 Update released for Drupal core (11.3.13)! Drupal 10.6.11 Update released for Drupal core (10.6.11)! Drupal 11.3.12 Update released for Drupal core (11.3.12)! Drupal 11.2.14 Update released for Drupal core (11.2.14)! Drupal 10.5.12 Update released for Drupal core (10.5.12)! Cms 2.1.3 Update released for Drupal core (2.1.3)! Drupal 10.5.11 Update released for Drupal core (10.5.11)! Drupal 11.3.11 Update released for Drupal core (11.3.11)! Drupal 11.2.13 Update released for Drupal core (11.2.13)! Drupal 10.6.10 Update released for Drupal core (10.6.10)! Cms 2.1.2 Update released for Drupal core (2.1.2)! Drupal 11.1.10 Update released for Drupal core (11.1.10)! Drupal 10.5.10 Update released for Drupal core (10.5.10)! Drupal 10.4.10 Update released for Drupal core (10.4.10)! Drupal 11.2.12 Update released for Drupal core (11.2.12)! Drupal 11.3.10 Update released for Drupal core (11.3.10)!

Advanced Filesystem

1 sites Security covered
View on drupal.org
Advanced File System

Take control of where your files live on disk, find the orphans, sanitize filenames, strip metadata, enforce upload quotas, extract rich EXIF/IPTC/XMP metadata, automate file lifecycle policies, generate AI-powered alt text, transform images on demand, compress uploads automatically, generate signed access-controlled download URLs, and rewrite all public file URLs to your CDN — all from Drupal's admin UI.

Overview

Advanced File System turns Drupal's file storage into a manageable, observable and maintainable subsystem. It ships a pluggable path strategy API (13 built-in strategies) to control where uploaded files land on disk, a batch migration tool with dry-run preview and confirmation step, a unified dashboard, a detailed file report with filters and CSV / JSON export, upload-time processing hooks (filename sanitization, duplicate resolver, EXIF stripping), and a suite of background services that monitor orphans, record storage growth, run retention rules, deduplicate content and rewrite hardcoded URLs after a migration.

The module ships a lean core plus sixteen sub-modules, four of which are automatically enabled on install and can be disabled independently. The remaining sub-modules are installed on demand:

  • advanced_filesystem_dedup — hash-based deduplication, visual similarity (pHash), duplicate email alerts
  • advanced_filesystem_cleanup — orphan management, dead image styles, bulk deletion, ghost file scanner, filename sanitizer, file tools
  • advanced_filesystem_reports — storage growth, folder sizes, file dependency graph, private file access
  • advanced_filesystem_quota — per-user and per-role upload quota enforcement with dashboard and per-user file listing
  • advanced_filesystem_backup — scheduled/manual/queue-triggered file backups to Local, FTP, S3, Cloudflare R2, or Google Cloud Storage; ZIP or file-by-file mode; restore & download
  • advanced_filesystem_remote_sync — pull all files from another Drupal server over HTTP Basic Auth; useful after importing a database dump to a new server
  • advanced_filesystem_upload_directory — automatically routes file/image field uploads to a configured directory at entity save time; per-field rules, global fallback, stream-wrapper selector, token support in paths, automatic directory creation, and a built-in file browser
  • advanced_filesystem_lifecycle_manager — config-entity lifecycle policies with conditions, time-based thresholds, archive/delete/notify/webhook actions, audit log, legal hold, restore, conflict detector, and per-field/per-bundle scoping
  • advanced_filesystem_metadata — extracts EXIF, IPTC, XMP, PDF, audio, and video metadata into typed fields on the file entity; group-based enablement; retry-guard prevents corrupted files from looping the queue indefinitely
  • advanced_filesystem_ai_transcription — pluggable semantic extraction pipeline: audio/video transcription, image captioning, PDF OCR, text enrichment, AI taxonomy tagging, vector embeddings, image analysis (objects / category / colors as hex strings / brands / bounding boxes / confidence scores), safety scoring, and face/emotion detection; powered by drupal/ai provider abstraction
  • advanced_filesystem_ai_alt_text — automatic alt text generation for image fields using AI vision; inline widget button, batch UI, and Drush command
  • advanced_filesystem_ai_smart_image — AI-powered filename suggestions for image files using a vision provider; per-file AJAX form, batch processing UI, conflict detection, auto-apply on upload, and apply-mode selector (display name or full rename)
  • advanced_filesystem_smart_image — on-demand adaptive image derivative endpoint (/adfs/image?src=…&w=…&fmt=…); resize, crop, filters, watermark, format negotiation, HMAC signing, transform plugin API, |adfs_srcset Twig filter, and cache warm-up batch
  • advanced_filesystem_image_optimizer — automatic GD-based image compression, dimension capping, and optional WebP conversion on every file save; configurable JPEG quality, PNG compression, MIME type filter, and savings statistics dashboard
  • advanced_filesystem_access — HMAC-SHA256 signed download URLs with configurable TTL; per-file download limits, IP allowlists/blocklists (CIDR-aware), global IP blocklist, full download access log with pruning, and |adfs_signed_url Twig filter
  • advanced_filesystem_cdn — transparent CDN URL rewriting via hook_file_url_alter(); cache-busting (timestamp or SHA-256 hash); MIME type filter; exclusion patterns; |adfs_cdn_url Twig filter; multi-provider cache purge (Cloudflare, BunnyCDN, Fastly, AWS CloudFront with native Sig v4, Generic/Varnish); auto-purge on file update/delete; manual purge form
  • advanced_filesystem_antivirus — ClamAV malware scanning on upload (TCP daemon, Unix socket, or CLI); configurable on-infection action (block / warn / log); bulk re-scan batch UI; signature database status on the dashboard; per-file detection log
  • advanced_filesystem_lgpd_gdpr — personal-data scanner for CPF, CNPJ, e-mail, phone, credit card numbers, and custom regex patterns; Batch API and cron-queue modes; filterable findings table; scan-tracking table (clean / flagged per file)
  • advanced_filesystem_webhooks — HTTP webhook dispatch on file events (upload, delete, antivirus detection, quota breach, LGPD finding); HMAC-SHA256 signed payloads; async queue delivery with configurable retries; per-endpoint event subscriptions; delivery log; compatible with Slack, Teams, n8n, Zapier, Make, and any HTTP endpoint
  • advanced_filesystem_ai_embeddings — 127-dimension self-contained visual embeddings (colour + structure + texture, no external API required); cosine-similarity search; k-means++ clustering with gallery UI; hybrid visual+semantic search with configurable α blending; REST/JSON API (stats, item, similar, clusters); pHash + dHash + quality metrics stored per image
  • advanced_filesystem_pdf_processor — enterprise PDF manipulation (Ghostscript + Poppler): 16 operation tabs (page range cut, keep/remove pages, password protect, thumbnails, split, OCR, compress, watermark, remove password, resize, rotate, extract images, PDF/A conversion, merge with AJAX preview); derivatives history with color-coded badge, file size, delete and export; per-file export creates a Drupal-managed File entity; dashboard with disk usage, clean old, and reprocess failed; Drupal Media Source Plugin + Views integration
  • advanced_filesystem_video_processor — frame-accurate video manipulation (FFmpeg): 13 operation tabs (thumbnail, trim, resize, crop, extract audio, convert format H.264/HEVC/VP9/AV1, speed, GIF, normalize audio, contact sheet, watermark, subtitles, HLS adaptive streaming); side-by-side VideoCompareController; derivatives history with badge/size/delete/export; dashboard; Drupal Media Source Plugin + Views integration
  • advanced_filesystem_document_processor — document conversion and manipulation (LibreOffice): 15 operation tabs (convert to PDF/DOCX/ODT, extract text, compress, password protect, add page numbers, remove tracked changes, mail merge, extract metadata, remove metadata, redact text, watermark, digital signature, merge); DocumentDiffForm (word-level LCS diff); derivatives history with badge/size/delete/export; dashboard; Drupal Media Source Plugin + Views integration
  • advanced_filesystem_presentation_processor — presentation processing (LibreOffice + Ghostscript): PPTX/ODP to PDF export, per-slide PNG thumbnails, text + speaker-notes extraction, embedded metadata extraction; Drupal Media Source Plugin + Views integration

Built around standard Drupal patterns: Plugin API, Batch API, Queue API, Cron, Mail, State and the Symfony EventDispatcher.

The module ships a lean core plus twenty-four sub-modules. Four are automatically enabled on install; the remaining twenty are installed on demand. The unified dashboard at /admin/reports/advanced_filesystem aggregates live metrics from every enabled sub-module automatically — no configuration required.

Highlights

Path organization

  • 13 built-in path strategies — from simple (flat, year) to advanced (CDN hash, date+hash, MIME type, content type, field name, user role, locale-aware).
  • Strategy presets — one-click configuration combos for the most common layouts.
  • Strategy simulator — enter a fictional file and instantly see the URI every installed strategy would produce, in dry-run mode with no disk writes.
  • Cron-based automatic migration — schedule file migration to run automatically on cron with configurable interval and per-run cap.

Visibility & reporting

  • Dashboard — single page with cards for stream wrappers, orphan counts, retention queue, migration stats, last rollback / rewrite, lifetime totals and audit-log entries. Cards for sub-modules appear automatically when enabled.
  • File report — filters (path, MIME, status, size range, field, used / unused), pagination, CSV / JSON export.
  • Folder report — recursive size and extension breakdown of any stream wrapper, with top-N largest files.
  • Storage growth report — historical snapshots of total storage and file count recorded on every cron run, with delta and percentage-change columns. Up to 90 snapshots retained.
  • File dependency graph — find which entities reference a file; detect dead file_usage rows.

Upload-time processing

  • Filename sanitizer — on hook_file_presave(): transliterate, lowercase, replace whitespace with a configurable separator, strip special characters, enforce max length.
  • Duplicate filename resolver — detects URI collisions in file_managed and auto-appends a numeric suffix (photo-2.jpg, photo-3.jpg…) instead of overwriting.
  • Media metadata stripper — re-encodes JPEG / PNG / WebP via PHP GD to strip EXIF / IPTC metadata (GPS coordinates, camera model, author name…).
  • File Quota Manager — enforces per-user and per-role upload quotas via hook_file_validate(). Most restrictive rule wins. Multi-user rule targeting supported.

Cleanup & maintenance

  • Orphan files monitor — read-only cron email alert when unreferenced file count crosses a configurable threshold.
  • Bulk delete orphans — one-click batch deletion of all currently detected orphan files, with two-step confirmation.
  • Retention rules — multi-rule cron actor: delete or quarantine unreferenced files older than N days, per-directory rule patterns, capped per run, optional dry-run and email report.
  • Dead image styles — detect image styles no longer referenced anywhere; flush derivatives or delete the style entirely.
  • Deduplication — SHA-256 hash detection, repoints file_usage and entity references to the canonical fid.
  • Visual similarity deduplication — 64-bit perceptual hash (dHash) groups near-duplicate images in a 4-column gallery UI; configurable Hamming distance threshold.
  • Duplicate file alerts — separate cron-based email notification when duplicate groups exceed a configurable threshold.
  • Ghost files scanner — batch scan that diffs file_managed against the real filesystem. Detects missing files (in DB, not on disk) and orphan files (on disk, not in DB). Configurable exclusions for auto-generated directories. Results page with paginated table, filter tabs, reclaimable disk-space totals, CSV export, and two-step irreversible deletion.

Lifecycle Manager (new)

  • Config-entity lifecycle policies — machine name, label, description, priority, enabled toggle. Evaluated on every cron run or on demand.
  • Flexible conditions — entity type, bundle, MIME type (wildcards), file size range, lifecycle status, EXIF metadata presence, minimum age (minutes / hours / days), and referencing entity context (entity type + bundle + field).
  • Per-field / per-bundle scoping — restrict a policy to files referenced from a specific content type or field. The lookup uses a single direct DB query on file_usage (no N+1 entity loading unless bundle/field filtering is needed).
  • Time-unit aware thresholds — archive-after, delete-after, and min-age all accept minutes, hours, or days. Legacy _days values are migrated transparently.
  • Actions: archive to configurable stream wrapper / subdirectory (directory auto-created at form save), soft delete, hard delete, strip EXIF metadata, email notifications with custom templates, and webhook (HTTP POST JSON payload).
  • Cron schedule per policy — day-of-week and hour-of-day restrictions.
  • Queue deduplication — in-memory set prevents the same file+policy pair from being enqueued twice per request.
  • Audit log — every action recorded in lifecycle_audit_log with a filterable admin view.
  • Legal hold — per-file flag via CSRF-protected endpoints; files on hold are never processed.
  • Restore action — moves archived files back to their original URI, resets lifecycle status to active.
  • Batch preview & batch run — Preview button shows up to 20 matching files without queuing; Batch run shows a Batch API progress bar.
  • Policy conflict detector — warns when two enabled policies have overlapping scopes and thresholds.

AI Transcription / Semantic Extraction (new)

  • Image analysis extractors — three new vision AI extractors for images:
    • ImageAnalysisExtractor — detects objects, classifies category, identifies dominant colors and brand logos; all stored as taxonomy terms. Supports both chat_with_image_vision (all 4 dimensions) and the native object_detection API (objects only, with bounding boxes and confidence scores).
    • ImageSafetyExtractor — rates nudity, violence, drugs and weapons; result stored as JSON (adfs_ai_safety_score).
    • ImageFaceEmotionExtractor — counts adults, children, and dominant emotions; results stored as JSON (adfs_ai_faces_json, adfs_ai_emotions_json).
  • 7 new image analysis fields on the file entity: adfs_ai_objects, adfs_ai_category, adfs_ai_colors, adfs_ai_brands (all taxonomy term references), adfs_ai_safety_score, adfs_ai_faces_json, adfs_ai_emotions_json (JSON strings).
  • Auto-created vocabularies — enabling taxonomy for any image dimension creates the vocabulary automatically.

Image Optimizer (new)

  • Automatic compression on upload — processes every image on hook_file_presave() via PHP GD. Static recursion guard prevents double-processing.
  • Dimension cap — optionally resize images to a configurable maximum width and/or height while preserving aspect ratio.
  • Per-format quality control — JPEG quality 1–100 (default 85); PNG compression level 0–9 (always lossless).
  • WebP conversion — writes an additional .webp copy alongside the original after optimization.
  • EXIF stripping — re-encoding via GD removes all EXIF/IPTC metadata (GPS, camera model, author, copyright, etc.).
  • MIME type filter — configure exactly which image types to process.
  • Savings statistics — lifetime bytes saved and file count tracked in Drupal State; visible in the settings form with a one-click reset button.

Access Control (new)

  • HMAC-SHA256 signed URLs — generate time-limited, tamper-proof download URLs for any file entity. Token encodes fid + expires; validated with hash_equals().
  • Secure download endpoint/adfs/download/{fid}/{token}?expires={ts}: validates token, checks IP, enforces per-file download limit, logs attempt, streams via BinaryFileResponse.
  • Per-file access rules — download limit (0 = unlimited), IP allowlist, IP blocklist, expiry timestamp — all configurable per FID via the service API.
  • CIDR-aware IP rules — both per-file and global rules accept exact IPs or CIDR ranges (e.g. 192.168.0.0/16, 2001:db8::/32).
  • Global IP blocklist — site-wide blocklist applied to every download, regardless of per-file rules.
  • Download access log — every request (allowed and blocked) recorded with FID, UID, IP, user-agent, method, and timestamp. Filterable admin view; configurable retention with one-click pruning.
  • |adfs_signed_url Twig filter — generate signed URLs in templates. Accepts FileInterface, integer FID, or field item list. TTL accepts seconds or shorthand strings: "30m", "2h", "7d", "1w".
  • hook_file_access() integration — blocks the download operation once the per-file limit is reached.

CDN Integration (new)

  • Transparent URL rewriting — rewrites all public file URLs to a CDN base URL via hook_file_url_alter(). Zero template changes required.
  • CDN path prefix & path stripping — configurable path prefix; optionally removes sites/default/files/ from CDN URLs.
  • Cache-busting — three modes: none, timestamp (file mtime), and hash (SHA-256 of file content). Appended as a configurable query parameter (default v=).
  • MIME type filter — limit rewriting to specific MIME prefix groups (e.g. only image/* and video/*).
  • Exclusion patterns — glob-style patterns (one per line) to skip specific paths from CDN rewriting.
  • Live URL preview — the settings form shows a before/after URL preview with current settings applied.
  • |adfs_cdn_url Twig filter — generate CDN URLs in templates from URI strings, FileInterface objects, or field items. Falls back to the standard Drupal URL when CDN is disabled or excluded.
  • Multi-provider cache purge:
    • Cloudflare — Bearer token + zone ID; per-URL and purge-all.
    • BunnyCDN — account API key; per-URL and pull-zone purge-all.
    • Fastly — API key + service ID; soft purge via HTTP PURGE method.
    • AWS CloudFront — native AWS Signature Version 4 (no SDK required); distribution invalidation.
    • Generic / Varnish — configurable HTTP method (PURGE / BAN / DELETE), custom headers as JSON, configurable purge-all URL.
  • Auto-purge on file events — optional auto-purge on hook_file_update() and hook_file_delete().
  • Manual purge form — purge all, by absolute CDN URL, by Drupal URI (auto-converted), or by FID.

Smart Image (updated)

  • Vision AI filename suggestions — sends an image to a chat_with_image_vision provider and receives a human-readable, SEO-friendly slug (e.g. golden-retriever-puppy-grass).
  • Per-file AJAX form — accessible at /admin/content/files/{fid}/smart-filename; shows image preview, existing suggestion with status badge, an AJAX generate button, editable slug field, and conflict preview warning.
  • Conflict detection — checks file_managed.filename for collisions and automatically appends a numeric suffix (-1, -2…) before applying.
  • Two apply modesdisplay name only (safe — updates the filename shown in admin without moving files on disk) and full rename (moves the file on disk and updates the URI).
  • Batch processing — bulk suggestion and apply for any selection of image files, with MIME filter, status filter, chunk size, and Drupal Batch API progress bar.
  • Auto-suggest and auto-apply on upload — optional hook_file_insert trigger; auto-apply can be configured independently of auto-suggest.
  • Suggestion tracking — custom DB table stores status (suggested / applied / skipped / failed), original filename, provider ID, and timestamps per file.
  • 14 metadata groups — EXIF camera, image properties, exposure, lens, GPS, dates, copyright, IPTC, XMP, image info, PDF, audio, video. Enable only the groups you need.
  • Retry-guard queue worker — tracks consecutive extraction failures per fid in State. After 3 failures the item is consumed (not re-queued) and the file is marked adfs_metadata_extraction_status = failed. Prevents corrupted files from looping the queue indefinitely.
  • Extraction status field (adfs_metadata_extraction_status) — pending | done | failed | skipped. Set on every queue worker outcome; queryable via Views or Entity Query.
  • Batch re-extraction — re-queue files for metadata extraction in bulk, with overwrite control.

Enterprise file processors (new)

  • PDF Processor — 16 operation tabs powered by Ghostscript and Poppler: page range cut, keep/remove pages, password protect, thumbnail gallery (auto-generated on first load for done jobs), split into N parts, OCR (Tesseract), compress (prepress/printer/ebook/screen), watermark, remove password, resize, rotate, extract images as ZIP, PDF/A conversion, and merge with AJAX merge preview (real-time filename + page count + size for each selected PDF before merging).
  • Video Processor — 13 operation tabs powered by FFmpeg: thumbnail extraction, trim, resize, crop, extract audio (MP3/AAC/WAV/FLAC), convert format (H.264/HEVC/VP9/AV1 with CRF), speed change with pitch correction, animated GIF with palette optimization, loudness normalization (EBU R128), contact sheet grid, image watermark, embed subtitles (SRT/VTT), and HLS adaptive streaming (.m3u8 + .ts). Includes a VideoCompareController for side-by-side derivative comparison.
  • Document Processor — 15 operation tabs powered by LibreOffice: convert to PDF/DOCX/ODT, extract plain text, compress (ZIP), password protect, add page numbers, remove tracked changes, mail merge (CSV/JSON data source), extract metadata, remove metadata, redact text patterns, watermark, digital signature, and merge with configurable separator page. Includes a DocumentDiffForm with word-level LCS diff (additions in green, deletions in red).
  • Presentation Processor — full-presentation PDF export, per-slide PNG thumbnails, speaker-notes extraction, and embedded metadata extraction (slide count, author, title, subject) for PPTX, ODP, and any LibreOffice-compatible format.
  • Shared UX across all processors: color-coded derivatives history table (green=done, red=failed, orange=processing, blue=pending) with file size, per-derivative Delete (CSRF-validated) and Export as managed File (copies to public://adfs_export_* and creates a Drupal File entity) buttons; per-processor Dashboard with disk usage stats, "Clean old derivatives" button, and "Reprocess failed jobs" button.

Media entity integration (new)

  • Each of the seven modules below ships a Drupal Media Source Plugin that exposes processor job data as named metadata attributes mappable to Media entity fields. No custom code required — create a Media type, select the plugin, map attributes to fields.
Plugin ID Module Exposed attributes adfs_pdf_processor advanced_filesystem_pdf_processor page_count, word_count, is_scanned, is_pdfa, pii_found, status, thumbnail_uri, text_extracted adfs_video_processor advanced_filesystem_video_processor duration, width, height, fps, video_codec, audio_codec, bitrate, status, thumbnail_uri, hls_uri adfs_document_processor advanced_filesystem_document_processor page_count, word_count, char_count, author, title, subject, pii_found, status adfs_presentation_processor advanced_filesystem_presentation_processor slide_count, has_notes, author, title, subject, status adfs_ai_embeddings advanced_filesystem_ai_embeddings quality, quality_flags, model, phash, ai_description, nsfw_label, nsfw_score adfs_ai_transcription advanced_filesystem_ai_transcription fulltext, summary, tags, confidence, extractor_id, image_caption adfs_metadata advanced_filesystem_metadata make, model, width, height, iso, datetime_original, gps_lat, gps_lon, extraction_status

Views integration (new)

  • Each processor sub-module ships a .views.inc implementing hook_views_data() (exposing its adfs_* tables and fields) and hook_views_data_alter() (adding relationships to file_managed). All processor tables are immediately available in Views without any configuration.
Module Tables exposed Relationships on file_managed advanced_filesystem_pdf_processor adfs_pdf_jobs (10 fields), adfs_pdf_derivatives, adfs_pdf_page_thumbs adfs_pdf_job, adfs_pdf_derivatives_rel advanced_filesystem_video_processor adfs_video_jobs (13 fields), adfs_video_derivatives adfs_video_job, adfs_video_derivatives_rel advanced_filesystem_document_processor adfs_document_jobs (11 fields), adfs_document_derivatives, adfs_document_page_thumbs adfs_document_job, adfs_document_derivatives_rel advanced_filesystem_presentation_processor adfs_presentation_jobs (9 fields) adfs_presentation_job advanced_filesystem_ai_embeddings adfs_ai_emb, adfs_ai_emb_ai — advanced_filesystem_metadata Adds GPS, thumbnail, metadata-score fields to file_managed —

Content integrity

  • Body reference rewriter — scans text_long, text_with_summary and link fields and rewrites hardcoded file URLs using the migration map. Supports relative + absolute URL variants in a single pass, all revisions, diagnose mode, and background processing via Drupal's Queue API.
  • Integrity check — verifies every file_managed row against disk.
  • Private file access — ties private:// access to the view permission of the referencing content entity.
  • Rollback — every migration writes a map row; roll back to original URIs at any time. Supports rollback by field, force overwrite, and date-range filters.

Developer experience

  • Audit log — every destructive operation recorded with user, timestamp, target, result and JSON details.
  • Symfony events — pre / post events for migrate, rollback, dedupe, rewrite, per-file retention, and per lifecycle action (LifecycleActionAppliedEvent).
  • Self-diagnosisdrush advfs:doctor runs a battery of checks and returns a non-zero exit code on failure. Perfect for CI / post-deploy pipelines.
  • Drush commands for every UI operation, scriptable for CI / CD.

Built-in path strategies

ID Label URI structure default Drupal Default Respects field directory tokens as Drupal core. flat Flat [scheme]://flat/[filename] flat_named Flat (named folder) [scheme]://[folder]/[filename] counted Counted Directory Field dir + numbered buckets capped at a configurable max. entity_bundle Entity / Bundle [scheme]://[entity_type]/[bundle]/[YYYY-MM/][filename] cdn_hash CDN-friendly content hash [scheme]://[folder]/[aa]/[bb]/[hash].[ext] — immutable URLs. date_hash Date + partial hash [scheme]://[folder]/YYYY/MM/[aa]/[bb]/[name--hash].[ext] locale_path Locale-aware [scheme]://[langcode]/[field_dir/][filename] content_type Content type path [scheme]://[folder]/[content_type]/[YYYY-MM/][filename] user_role User role path [scheme]://[folder]/[role]/[YYYY-MM/][filename] mime_type MIME type path [scheme]://[folder]/[images|video|audio|documents|archives|text|other]/[YYYY-MM/][filename] year Year path [scheme]://[folder]/YYYY/[MM/][filename] field_name Field name path [scheme]://[folder]/[field_name]/[YYYY-MM/][filename]

Ship your own strategy from any module using the @PathStrategy annotation — it is automatically picked up by the migration UI and all Drush commands.

Admin pages

Core module

  • Dashboard/admin/reports/advanced_filesystem
  • Files report/admin/reports/advanced_filesystem/files
  • Migrate Files Strategy/admin/config/media/advanced_filesystem/strategy
  • Cron migration/admin/config/media/advanced_filesystem/cron-migration
  • Strategy simulator/admin/config/media/advanced_filesystem/simulator
  • Rollback/admin/config/media/advanced_filesystem/rollback
  • Rewrite embedded URLs/admin/config/media/advanced_filesystem/rewrite
  • Integrity report/admin/reports/advanced_filesystem/integrity

Deduplication sub-module

  • Deduplicate files/admin/config/media/advanced_filesystem/dedupe
  • Visual similarity dedupe/admin/config/media/advanced_filesystem/perceptual-dedupe
  • Duplicate alerts/admin/config/media/advanced_filesystem/duplicate-alert

Cleanup sub-module

  • Orphan & retention settings/admin/config/media/advanced_filesystem/orphan-settings
  • Dead image styles/admin/config/media/advanced_filesystem/dead-styles
  • Bulk delete orphans/admin/config/media/advanced_filesystem/bulk-delete-orphans
  • Ghost file scan/admin/config/media/advanced_filesystem/ghost-scan
  • Ghost file results/admin/config/media/advanced_filesystem/ghost-results
  • Filename sanitizer/admin/config/media/advanced_filesystem/sanitizer
  • File tools/admin/config/media/advanced_filesystem/file-tools

Reports sub-module

  • Folder sizes/admin/reports/advanced_filesystem/folders
  • Storage growth/admin/reports/advanced_filesystem/storage-growth
  • File dependency graph/admin/config/media/advanced_filesystem/file-dependency
  • Private file access/admin/config/media/advanced_filesystem/private-access

File Quota sub-module

  • Quota settings/admin/config/media/advanced_filesystem/quota
  • Quota dashboard/admin/reports/advanced_filesystem/quota
  • My Files/user/files

File Backup sub-module

  • Dashboard/admin/config/media/advanced_filesystem/backup
  • Settings/admin/config/media/advanced_filesystem/backup/settings
  • Remote Sync/admin/config/media/advanced_filesystem/backup/remote-sync

Remote Sync sub-module

  • Sync form/admin/config/media/advanced_filesystem/backup/remote-sync
  • API — list files (source server)/advanced-filesystem-remote-sync/list
  • API — serve file (source server)/advanced-filesystem-remote-sync/file

Upload Directory sub-module

  • Settings/admin/config/media/advanced_filesystem/upload-directory
  • Browse files/admin/config/media/advanced_filesystem/upload-directory/browse
  • Browse by scheme/admin/config/media/advanced_filesystem/upload-directory/browse/{scheme}

AI Transcription sub-module

  • Settings & extractor matrix/admin/config/media/advanced_filesystem/ai-transcription
  • Batch processing/admin/config/media/advanced_filesystem/ai-transcription/batch
  • Single file extraction/admin/content/files/{file}/semantic

AI Smart Image sub-module

  • Settings/admin/config/media/advanced_filesystem/ai-smart-image
  • Batch processing/admin/config/media/advanced_filesystem/ai-smart-image/batch
  • Per-file form/admin/content/files/{file}/smart-filename

File Metadata sub-module

  • Settings/admin/config/media/advanced_filesystem/metadata
  • Re-extract/admin/config/media/advanced_filesystem/metadata/reextract

AI Alt Text sub-module

  • Settings/admin/config/media/advanced_filesystem/ai-alt-text
  • Batch generation/admin/config/media/advanced_filesystem/ai-alt-text/batch
  • Single file/admin/content/files/{file}/ai-alt-text

Smart Image sub-module

  • Settings/admin/config/media/advanced_filesystem/smart-image
  • Derivative endpoint/adfs/image?src=…&<params></params>
  • Cache warm-up/admin/config/media/advanced_filesystem/smart-image/warmup

Lifecycle Manager sub-module

  • Lifecycle policies/admin/config/media/advanced_filesystem/lifecycle
  • Add / edit policy/admin/config/media/advanced_filesystem/lifecycle/add
  • Lifecycle settings/admin/config/media/advanced_filesystem/lifecycle/settings
  • Run evaluation/admin/config/media/advanced_filesystem/lifecycle/run
  • Audit log/admin/config/media/advanced_filesystem/lifecycle/log
  • Legal hold list/admin/config/media/advanced_filesystem/lifecycle/legal-hold

LGPD/GDPR Auditor sub-module

  • Settings/admin/config/media/lgpd-auditor/settings
  • Run scan/admin/config/media/lgpd-auditor/scan
  • Audit results/admin/config/media/lgpd-auditor/results

Antivirus sub-module

  • Settings/admin/config/media/advanced_filesystem/antivirus
  • Detection log/admin/config/media/advanced_filesystem/antivirus/log
  • Bulk scan/admin/config/media/advanced_filesystem/antivirus/batch

Webhooks sub-module

  • Endpoints & settings/admin/config/media/advanced_filesystem/webhooks
  • Delivery log/admin/config/media/advanced_filesystem/webhooks/log

AI Image Embeddings sub-module

  • Settings/admin/config/media/advanced_filesystem/ai-embeddings
  • Clusters gallery/admin/config/media/advanced_filesystem/ai-embeddings/clusters
  • REST API/api/ai-embeddings/stats, /api/ai-embeddings/{file}, /api/ai-embeddings/{file}/similar, /api/ai-embeddings/clusters

PDF Processor sub-module

  • Per-file edit form/admin/content/files/{file}/pdf/edit
  • Merge form/admin/content/files/{file}/pdf/merge
  • Thumbnails/admin/content/files/{file}/pdf/thumbnails
  • Dashboard/admin/adfs/pdf/dashboard
  • Settings/admin/config/media/advanced_filesystem/pdf-processor
  • Derivative delete/{file}/pdf/derivative/{did}/delete (CSRF)
  • Derivative export/{file}/pdf/derivative/{did}/export
  • Dashboard clean/admin/adfs/pdf/dashboard/clean
  • Dashboard reprocess/admin/adfs/pdf/dashboard/reprocess

Video Processor sub-module

  • Per-file edit form/admin/content/files/{file}/video/edit
  • Compare view/admin/content/files/{file}/video/compare
  • Dashboard/admin/adfs/video/dashboard
  • Settings/admin/config/media/advanced_filesystem/video-processor
  • Derivative delete/{file}/video/derivative/{did}/delete (CSRF)
  • Derivative export/{file}/video/derivative/{did}/export
  • Dashboard clean/admin/adfs/video/dashboard/clean
  • Dashboard reprocess/admin/adfs/video/dashboard/reprocess

Document Processor sub-module

  • Per-file edit form/admin/content/files/{file}/document/edit
  • Merge form/admin/content/files/{file}/document/merge
  • Diff view/admin/content/files/{file}/document/diff
  • Dashboard/admin/adfs/document/dashboard
  • Settings/admin/config/media/advanced_filesystem/document-processor
  • Derivative delete/{file}/document/derivative/{did}/delete (CSRF)
  • Derivative export/{file}/document/derivative/{did}/export
  • Dashboard clean/admin/adfs/document/dashboard/clean
  • Dashboard reprocess/admin/adfs/document/dashboard/reprocess

Presentation Processor sub-module

  • Per-file edit form/admin/content/files/{file}/presentation/edit
  • Settings/admin/config/media/advanced_filesystem/presentation-processor

Image Optimizer sub-module

  • Settings/admin/config/media/advanced_filesystem/image-optimizer
  • Bulk optimize existing images/admin/config/media/advanced_filesystem/image-optimizer/batch
  • Optimization log/admin/config/media/advanced_filesystem/image-optimizer/log

Access Control sub-module

  • Settings/admin/config/media/advanced_filesystem/access
  • Access Log/admin/config/media/advanced_filesystem/access/log
  • Secure download endpoint/adfs/download/{fid}/{token}?expires={ts}

CDN Integration sub-module

  • Settings/admin/config/media/advanced_filesystem/cdn
  • Cache Purge/admin/config/media/advanced_filesystem/cdn/purge
  • Purge Log/admin/config/media/advanced_filesystem/cdn/purge-log

Drush commands

  • advanced_filesystem:migrate-files — migrate all files (or one field's files) with optional --strategy, --delete, --dry-run.
  • advanced_filesystem:rewrite (alias afr) — rewrite embedded URLs in long-text and link fields. Options: --dry-run, --all-revisions, --entity-type, --field, --list.
  • advanced_filesystem:check-orphans — force orphan check, bypassing cron throttle.
  • advanced_filesystem:run-retention — force retention pass: --dry-run, --list, --list-rules.
  • advanced_filesystem:rollback — revert migrations: --since, --until, --dry-run, --force, --rewrite-bodies.
  • advanced_filesystem:dedupe — compute hashes and merge duplicate groups.
  • advanced_filesystem:check-integrity — verify every file_managed row against disk.
  • advanced_filesystem:folder-report — recursive size / extension breakdown of a stream wrapper.
  • advanced_filesystem:doctor (alias advfs:doctor) — self-diagnosis; exit 1 on FAIL (or WARN with --strict).
  • lifecycle:run — trigger lifecycle policy evaluation immediately.
  • lifecycle:status — display per-policy statistics (archived, deleted, errors, last processed).
  • lifecycle:reset-stats — reset per-policy counters in State.
  • metadata:extract — queue all eligible files for metadata extraction.
  • metadata:status — show extraction queue depth and per-status file counts.
  • adfs:ai:transcribe — run semantic extraction on a single file. Options: --overwrite, --language.
  • adfs:semantic:extract — run the full semantic pipeline on one file.
  • adfs:ai:batch (alias adfs-ai-batch) — queue files for semantic extraction. Options: --limit, --overwrite, --status.
  • adfs:semantic:status — show all adfs_ai_* field values for a file.
  • adfs:semantic:list-extractors — list all discovered @SemanticExtractor plugins.
  • adfs:ai:retry — re-queue all files with failed extraction status.
  • adfs:ai:stats — print extraction status counters.
  • adfs:alt-text:generate (alias adfs-alt) — generate alt text in bulk. Options: --nid, --term-id, --entity-type, --bundle, --field-name, --overwrite, --chunk.
  • adfs:image:derive — pre-generate a single Smart Image derivative. Options: --w, --h, --fmt, --preset.
  • adfs:image:prebuild — pre-generate derivatives for all managed image files.
  • adfs:image:purge — delete all files in the derivatives cache directory.
  • adfs:image:stats — report derivatives cache directory size and file count.
  • adfs:image:token — generate an HMAC token for a signed Smart Image URL.
  • adfs:image:warmup — warm the Smart Image derivative cache for all managed images. Options: --preset, --widths, --fmt, --fit, --limit, --mime.
  • adfs:image-optimizer:run (alias adfs-opt) — bulk-optimize existing managed images (re-encode / resize / strip metadata / WebP). Options mirror the optimizer settings.
  • adfs:image-optimizer:stats (alias adfs-opt-stats) — report optimization log totals and bytes saved.
  • adfs:ai-emb:index — index all eligible image files for visual embeddings. Options: --limit.
  • adfs:ai-emb:ai-enrich — run AI semantic enrichment on indexed images. Options: --limit.
  • adfs:ai-emb:stats — print embedding coverage and AI enrichment counts.

Requirements

  • Drupal 10, 11, or 12
  • PHP 8.1+
  • The file module (core)
  • Drush 12+ — optional, for CLI commands
  • A working MailManager for email notifications
  • A configured private filesystem for quarantine and private file access
  • PHP GD extension — required for image metadata stripping, perceptual hashing, Smart Image derivatives, and AI alt text image preprocessing
  • PHP fileinfo extension for MIME-based metadata extraction
  • drupal/ai module — required by advanced_filesystem_ai_transcription and advanced_filesystem_ai_alt_text; configure AI providers at Admin → Config → AI → AI Settings
  • ffmpeg — optional, required for video transcription in advanced_filesystem_ai_transcription
  • poppler-utils (pdftotext, pdftoppm, pdfimages) — optional; required by advanced_filesystem_pdf_processor for text extraction and image extraction from PDFs
  • Ghostscript (gs) — required by advanced_filesystem_pdf_processor (compress, thumbnail, watermark, PDF/A, resize, rotate) and advanced_filesystem_presentation_processor (slide PNG export)
  • LibreOffice (soffice) — required by advanced_filesystem_document_processor and advanced_filesystem_presentation_processor for format conversion
  • Tesseract OCR (tesseract) — optional; required by advanced_filesystem_pdf_processor for the OCR operation tab
  • drupal:media module (core, enabled by default) — required by all four processor sub-modules for Media Source Plugin API support

Installation

composer require drupal/advanced_filesystem
drush en advanced_filesystem -y
drush updb
drush cr

The four core sub-modules are automatically enabled on install. Enable the additional sub-modules separately when needed:

# File management
drush en advanced_filesystem_backup -y
drush en advanced_filesystem_remote_sync -y
drush en advanced_filesystem_upload_directory -y
drush en advanced_filesystem_lifecycle_manager -y
drush en advanced_filesystem_metadata -y

# Security & compliance
drush en advanced_filesystem_antivirus -y
drush en advanced_filesystem_lgpd_gdpr -y
drush en advanced_filesystem_access -y

# Delivery & integration
drush en advanced_filesystem_cdn -y
drush en advanced_filesystem_webhooks -y

# Image processing
drush en advanced_filesystem_smart_image -y
drush en advanced_filesystem_image_optimizer -y

# AI features
drush en advanced_filesystem_ai_transcription -y
drush en advanced_filesystem_ai_alt_text -y
drush en advanced_filesystem_ai_smart_image -y
drush en advanced_filesystem_ai_embeddings -y

# File processors (require drupal:media)
drush en advanced_filesystem_pdf_processor -y
drush en advanced_filesystem_video_processor -y
drush en advanced_filesystem_document_processor -y
drush en advanced_filesystem_presentation_processor -y


Donation Support

This project took significant time to develop. If it has helped you save time in your work or business, feel free to contribute any amount you consider fair to support its continued development

Activity

Total releases
29
First release
May 2026
Latest release
3 weeks ago
Release cadence
1 day
Stability
97% stable

Release Timeline

Releases

Version Type Release date
1.0.27 Stable Jun 22, 2026
1.0.26 Stable Jun 17, 2026
1.0.25 Stable Jun 17, 2026
1.0.24 Stable Jun 16, 2026
1.0.23 Stable Jun 15, 2026
1.0.22 Stable Jun 15, 2026
1.0.21 Stable Jun 13, 2026
1.0.20 Stable Jun 12, 2026
1.0.19 Stable Jun 11, 2026
1.0.18 Stable Jun 10, 2026
1.0.17 Stable Jun 9, 2026
1.0.16 Stable Jun 8, 2026
1.0.15 Stable Jun 7, 2026
1.0.14 Stable Jun 5, 2026
1.0.13 Stable Jun 3, 2026
1.0.12 Stable Jun 3, 2026
1.0.11 Stable Jun 3, 2026
1.0.10 Stable Jun 3, 2026
1.0.9 Stable Jun 3, 2026
1.0.8 Stable Jun 3, 2026
1.0.7 Stable Jun 3, 2026
1.0.6 Stable Jun 2, 2026
1.0.5 Stable Jun 1, 2026
1.0.4 Stable Jun 1, 2026
1.0.3 Stable Jun 1, 2026
1.0.2 Stable May 30, 2026
1.0.1 Stable May 30, 2026
1.0.0 Stable May 29, 2026
1.0.x-dev Dev May 29, 2026