.. include:: /Includes.rst.txt .. _usage: ===== Usage ===== This chapter shows practical examples for integrating responsive images into your Fluid templates and for operating the command-line tools that ship with the extension. .. _usage-namespace: Register the namespace ====================== Add the ViewHelper namespace at the top of your Fluid template or register it globally: .. code-block:: html :caption: Inline namespace declaration {namespace nr=Netresearch\NrImageOptimize\ViewHelpers} .. _usage-basic-example: Basic responsive image ====================== .. code-block:: html :caption: Simple responsive image Quality is not configurable per call: the ViewHelper always emits its default quality of 75 into the generated ``/processed/...q...`` URL. .. _usage-responsive-srcset: Responsive width-based srcset ============================= Enable width-based ``srcset`` generation with a ``sizes`` attribute for improved responsive image handling. This is opt-in per usage. .. code-block:: html :caption: Enable responsive srcset with default variants .. _usage-custom-variants: Custom width variants --------------------- .. code-block:: html :caption: Specify custom breakpoints for srcset .. _usage-output-comparison: Output comparison ================= **Legacy mode** (``responsiveSrcset=false`` or not set): .. code-block:: html :caption: Density-based 2x srcset output **Responsive mode** (``responsiveSrcset=true``): .. code-block:: html :caption: Width-based srcset output Image .. _usage-protected-files: Public images only: absolute URLs are passed through ===================================================== .. versionadded:: 2.2.4 Absolute URLs, ``data:`` URIs, and URLs with a query string are passed through unchanged and rendered as a plain ```` tag. The ``/processed/`` endpoint is designed for **public files** only. It resolves the given path below the public web root and writes the generated variants as static files into :file:`public/processed/`, where the web server delivers them directly — without any access check. Files in non-public FAL storages (``is_public = 0``) can therefore not be processed. Extensions such as `fal_securedownload `__ resolve such files to tokenized eID URLs (``/index.php?eID=dumpFile&...``) whose delivery runs through TYPO3 and performs a permission check on every request. The ViewHelper detects absolute URLs (``http://``, ``https://``, ``//``), ``data:`` URIs, and URLs containing a query string and passes them through unchanged, rendering a plain ```` tag with the URL as ``src``: .. code-block:: html :caption: Output for a file from a protected storage Protected image .. important:: **Trade-off for passed-through URLs** - No ``srcset``/``sizes`` attributes and no per-breakpoint ```` elements are generated — the browser always loads the image in its original dimensions. - No WebP/AVIF variants and no quality optimization are applied. - In return, the access control of the generating extension (e.g. fal_securedownload) stays fully intact, because the URL — including its access token — is emitted unchanged. If you need optimized variants of images in protected storages, generate them with TYPO3's own image processing (for example ``f:image`` or the ``ImageService``). Processed files are then created inside the protected storage's processing folder and are delivered through the same secure-download mechanism, keeping the permission check intact. .. _usage-fetchpriority: Fetch priority for Core Web Vitals =================================== Use the ``fetchpriority`` attribute to hint the browser about resource prioritization, improving Largest Contentful Paint (LCP) scores: .. code-block:: html :caption: High priority for above-the-fold hero image .. _usage-cli: Command-line tools ================== Both commands read the FAL index directly and process eligible image files (``image/jpeg``, ``image/gif``, ``image/png``) on online storages. Per-file storage permission evaluation is temporarily disabled and restored in a ``finally`` block so long-running CLI runs don't leak state across iterations or require a BE user context. .. _usage-cli-optimize: Bulk optimize images -------------------- The ``nr:image:optimize`` command compresses every eligible PNG, GIF, and JPEG file across all storages (or a restricted subset) using the installed optimizer binaries. The original file is replaced in place only when the tool produces a smaller result. .. code-block:: bash :caption: Preview what would be processed vendor/bin/typo3 nr:image:optimize --dry-run .. code-block:: bash :caption: Compress storage 1 with lossy JPEG quality 85 vendor/bin/typo3 nr:image:optimize \ --storages=1 \ --jpeg-quality=85 \ --strip-metadata Options: ``--dry-run`` Only analyze; do not modify files. ``--storages`` Restrict to specific storage UIDs. Accepts repeated occurrences or a comma-separated list. ``--jpeg-quality`` Lossy JPEG quality 0--100. Omit for lossless JPEG optimization. ``--strip-metadata`` Remove EXIF and comments when the tool supports it. .. _usage-cli-analyze: Analyze optimization potential ------------------------------ The ``nr:image:analyze`` command estimates how much disk space could be saved by running ``nr:image:optimize`` or by downscaling oversized originals. It is purely heuristic -- no external binaries are invoked, so it runs quickly even on large installations. .. code-block:: bash :caption: Report potential for storage 1 vendor/bin/typo3 nr:image:analyze --storages=1 Options: ``--storages`` Restrict to specific storage UIDs. ``--max-width`` / ``--max-height`` Target display box (default 2560 x 1440). Images larger than this box are assumed to be downscaled and the estimate factors in the area reduction. ``--min-size`` Skip files smaller than this many bytes (default 512000). Prevents noise from already-tiny images.