{"id":13518431,"url":"https://github.com/netresearch/t3x-rte_ckeditor_image","last_synced_at":"2026-04-02T14:01:45.495Z","repository":{"id":37470578,"uuid":"91094390","full_name":"netresearch/t3x-rte_ckeditor_image","owner":"netresearch","description":"Image support in CKEditor for the TYPO3 ecosystem - by Netresearch","archived":false,"fork":false,"pushed_at":"2026-03-31T17:26:25.000Z","size":6277,"stargazers_count":61,"open_issues_count":6,"forks_count":67,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-03-31T18:24:03.553Z","etag":null,"topics":["ckeditor","ckeditor-plugin","magic-images","rte-ckeditor","typo3","typo3-extension","typo3cms-extension"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netresearch.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2017-05-12T13:29:43.000Z","updated_at":"2026-03-31T17:19:48.000Z","dependencies_parsed_at":"2023-09-27T12:00:26.742Z","dependency_job_id":"86d9c51a-c6ae-45c8-993b-e1a4a60a7090","html_url":"https://github.com/netresearch/t3x-rte_ckeditor_image","commit_stats":{"total_commits":297,"total_committers":56,"mean_commits":5.303571428571429,"dds":0.7171717171717171,"last_synced_commit":"d6b0e6ca4a37dee273d0a41472918e8b10fa1e44"},"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"purl":"pkg:github/netresearch/t3x-rte_ckeditor_image","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netresearch%2Ft3x-rte_ckeditor_image","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netresearch%2Ft3x-rte_ckeditor_image/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netresearch%2Ft3x-rte_ckeditor_image/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netresearch%2Ft3x-rte_ckeditor_image/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netresearch","download_url":"https://codeload.github.com/netresearch/t3x-rte_ckeditor_image/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netresearch%2Ft3x-rte_ckeditor_image/sbom","scorecard":{"id":1242360,"data":{"date":"2026-01-25T00:34:14Z","repo":{"name":"github.com/netresearch/t3x-rte_ckeditor_image","commit":"a7dc37066cd006ba34bbe042eba266f77b547bb2"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":6.3,"checks":[{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1","Info: detected update tool: RenovateBot: renovate.json:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/7 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":7,"reason":"dependency not pinned by hash detected -- score normalized to 7","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/add-to-project.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/netresearch/t3x-rte_ckeditor_image/add-to-project.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/add-to-project.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/netresearch/t3x-rte_ckeditor_image/add-to-project.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-release.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/netresearch/t3x-rte_ckeditor_image/create-release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/slsa-provenance.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/netresearch/t3x-rte_ckeditor_image/slsa-provenance.yml/main?enable=pin","Warn: containerImage not pinned by hash: .ddev/web-build/Dockerfile:2","Warn: npmCommand not pinned by hash: .ddev/commands/host/test-e2e:18","Info:  15 out of  18 GitHub-owned GitHubAction dependencies pinned","Info:   6 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   1 out of   2 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/auto-merge-deps.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/ci.yml:19","Info: jobLevel 'contents' permission set to 'read': .github/workflows/ci.yml:170","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:21","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:22","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish-to-ter.yml:23","Info: jobLevel 'actions' permission set to 'read': .github/workflows/slsa-provenance.yml:14","Info: jobLevel 'actions' permission set to 'read': .github/workflows/slsa-provenance.yml:115","Info: topLevel 'contents' permission set to 'read': .github/workflows/add-to-project.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/auto-merge-deps.yml:8","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:13","Warn: topLevel 'contents' permission set to 'write': .github/workflows/create-release.yml:17","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish-to-ter.yml:14","Info: topLevel 'contents' permission set to 'read': .github/workflows/release-labeler.yml:21","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:14","Info: topLevel permissions set to 'read-all': .github/workflows/slsa-provenance.yml:7"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Affero General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'TYPO3_12'","Warn: branch protection not enabled for branch 'TYPO3_11'","Warn: branch protection not enabled for branch 'TYPO3_10'","Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"10 out of 10 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 4 contributing companies or organizations","details":["Info: found contributions from: netresearch, netresearch dtt gmbh, oroinc, webcoast-dk @goforlocal"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}}]},"last_synced_at":"2026-01-25T09:59:37.189Z","repository_id":37470578,"created_at":"2026-01-25T09:59:37.189Z","updated_at":"2026-01-25T09:59:37.189Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307459,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ckeditor","ckeditor-plugin","magic-images","rte-ckeditor","typo3","typo3-extension","typo3cms-extension"],"created_at":"2024-08-01T05:01:44.754Z","updated_at":"2026-04-02T14:01:45.418Z","avatar_url":"https://github.com/netresearch.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"[![Latest GitHub release](https://img.shields.io/github/v/release/netresearch/t3x-rte_ckeditor_image?sort=semver\u0026logo=github)](https://github.com/netresearch/t3x-rte_ckeditor_image/releases/latest)\n[![License](https://img.shields.io/github/license/netresearch/t3x-rte_ckeditor_image)](https://github.com/netresearch/t3x-rte_ckeditor_image/blob/main/LICENSE)\n[![CI](https://github.com/netresearch/t3x-rte_ckeditor_image/actions/workflows/ci.yml/badge.svg)](https://github.com/netresearch/t3x-rte_ckeditor_image/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/netresearch/t3x-rte_ckeditor_image/actions/workflows/codeql.yml/badge.svg)](https://github.com/netresearch/t3x-rte_ckeditor_image/actions/workflows/codeql.yml)\n[![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/netresearch/t3x-rte_ckeditor_image?label=openssf+scorecard\u0026style=flat)](https://securityscorecards.dev/viewer/?uri=github.com/netresearch/t3x-rte_ckeditor_image)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11718/badge)](https://www.bestpractices.dev/projects/11718)\n[![OpenSSF Baseline](https://www.bestpractices.dev/projects/11718/baseline)](https://www.bestpractices.dev/en/projects/11718#openssf_security_baseline)\n[![PHPStan](https://img.shields.io/badge/PHPStan-level%2010-brightgreen.svg?logo=php)](https://phpstan.org/)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-3.0-4baaaa.svg)](CODE_OF_CONDUCT.md)\n[![codecov](https://codecov.io/gh/netresearch/t3x-rte_ckeditor_image/graph/badge.svg)](https://codecov.io/gh/netresearch/t3x-rte_ckeditor_image)\n[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://github.com/netresearch/t3x-rte_ckeditor_image/attestations)\n[![Documentation](https://img.shields.io/badge/docs-docs.typo3.org-orange.svg?logo=typo3)](https://docs.typo3.org/p/netresearch/rte-ckeditor-image/main/en-us/)\n\n[![Composer](https://typo3-badges.dev/badge/rte_ckeditor_image/composer/shields.svg)](https://packagist.org/packages/netresearch/rte-ckeditor-image)\n[![Total downloads](https://typo3-badges.dev/badge/rte_ckeditor_image/downloads/shields.svg)](https://extensions.typo3.org/extension/rte_ckeditor_image)\n[![TYPO3 extension](https://typo3-badges.dev/badge/rte_ckeditor_image/extension/shields.svg)](https://extensions.typo3.org/extension/rte_ckeditor_image)\n[![Stability](https://typo3-badges.dev/badge/rte_ckeditor_image/stability/shields.svg)](https://extensions.typo3.org/extension/rte_ckeditor_image)\n[![TYPO3 versions](https://img.shields.io/badge/TYPO3-13%20%7C%2014-orange.svg?logo=typo3)](https://extensions.typo3.org/extension/rte_ckeditor_image)\n[![Latest TER version](https://typo3-badges.dev/badge/rte_ckeditor_image/version/shields.svg)](https://extensions.typo3.org/extension/rte_ckeditor_image)\n\u003c!-- Generated with 🧡 at typo3-badges.dev --\u003e\n\n# Image support for CKEditor for TYPO3\n\nThis extension adds comprehensive image handling capabilities to CKEditor for TYPO3.\\\nAdd issues or explore the project on [GitHub](https://github.com/netresearch/t3x-rte_ckeditor_image).\n\n\u003ckbd\u003e![](Documentation/Images/backend-image-properties-dialog.png?raw=true)\u003c/kbd\u003e\n\n## Features\n\n- **TYPO3 FAL Integration**: Native file browser with full File Abstraction Layer support\n- **Magic Images**: Same image processing as rtehtmlarea (cropping, scaling, TSConfig supported)\n- **Image Dialog**: Configure width, height, alt, and title (aspect ratio automatically maintained)\n- **Quality Selector**: Quality multipliers for optimal display (Standard 1.0x, Retina 2.0x, Ultra 3.0x, Print 6.0x)\n- **SVG Support**: Intelligent dimension extraction from viewBox and width/height attributes\n- **Custom Styles**: Configurable image styles with CKEditor 5 style system\n- **Inline Images**: True inline image support with cursor positioning before/after\n- **Lazy Loading**: TYPO3 native browser lazyload support\n- **Event-Driven**: PSR-14 events for extensibility\n- **Security**: Protocol blocking, XSS prevention, file visibility validation\n- **Fluid Templates**: Customizable output via template overrides with automatic figcaption width constraint\n- **Image Validation**: CLI command and upgrade wizard to detect and fix broken image references and nested link wrappers\n- **Preview Renderer**: Images preserved in page module preview with broken reference warnings\n- **Content Blocks Support**: ViewHelper for rendering RTE image previews in Content Blocks backend templates\n- **Table Images**: Images in CKEditor 5 tables get full processing (max-width, zoom, t3:// resolution)\n- **Automatic Softref**: RTE image references tracked automatically across all tables\n\n## Requirements\n\n- **TYPO3:** 13.4.21+ or 14.0+\n- **PHP:** 8.2 or later\n- **Extensions:** cms-rte-ckeditor (included in TYPO3 core)\n\n\u003e **Note:** The plugin automatically integrates with CKEditor's `GeneralHtmlSupport` for style functionality. No additional configuration required.\n\n## Installation\n\n### Quick Start\n\nInstall the extension via composer:\n\n```shell\ncomposer req netresearch/rte-ckeditor-image\n```\n\nEnable the Site Set to activate both the backend RTE preset and frontend rendering:\n\nAdd the extension to your site dependencies:\n\n```yaml\n# config/sites/\u003csite\u003e/config.yaml\ndependencies:\n  - netresearch/rte-ckeditor-image\n```\n\nThis enables the RTE preset with the `insertimage` button and includes the frontend TypoScript for image processing.\n\n\u003e **Using Bootstrap Package or another theme extension?** List this extension **after** them in your dependencies to override their RTE preset.\n\n**Alternative: Direct TypoScript Import**\n\nIf you prefer manual control over TypoScript load order:\n\n```typoscript\n@import 'EXT:rte_ckeditor_image/Configuration/TypoScript/ImageRendering/setup.typoscript'\n```\n\n### Custom Configuration (Optional)\n\nIf you need to customize the RTE configuration or create your own preset:\n\n1. Create a custom preset in your site extension:\n\n    ```php\n    \u003c?php\n    // EXT:my_ext/ext_localconf.php\n    $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['my_custom_preset']\n        = 'EXT:my_ext/Configuration/RTE/Default.yaml';\n    ```\n\n2. Import the image plugin configuration:\n\n    ```yaml\n    # EXT:my_ext/Configuration/RTE/Default.yaml\n    imports:\n      - { resource: \"EXT:rte_ckeditor/Configuration/RTE/Default.yaml\" }\n      - { resource: \"EXT:rte_ckeditor_image/Configuration/RTE/Plugin.yaml\" }\n\n    editor:\n      config:\n        toolbar:\n          items:\n            - heading\n            - '|'\n            - insertimage\n            - link\n            - '|'\n            - bold\n            - italic\n    ```\n\n3. Enable your custom preset via Page TSConfig:\n\n    ```\n    # Page TSConfig\n    RTE.default.preset = my_custom_preset\n    ``` \n\n## Configuration\n\n(optional) Configure the Extension Configuration for this extension:\n\n**fetchExternalImages**: By default, if an img source is an external URL, this image will be fetched and uploaded\nto the current BE users uploads folder. The default behaviour can be turned off with this option.\n\n**enableAutomaticRteSoftref**: Automatically adds `rtehtmlarea_images` soft reference to all RTE-enabled text fields. Ensures images are tracked in the reference index. Default: on.\n\n**enableAutomaticPreviewRenderer**: Registers an image-aware preview renderer for all record types with RTE bodytext. Shows images in page module preview and warns about broken references. Default: on.\n\n**excludedTables**: Comma-separated table names to exclude from automatic softref and preview renderer processing.\n\n**includedTablesOnly**: Whitelist mode — if set, only these tables are processed. Overrides excludedTables.\n\nSee the [full configuration reference](https://docs.typo3.org/p/netresearch/rte-ckeditor-image/main/en-us/Integration/Advanced-Configuration.html) for details.\n\n### Maximum width/height\n\nThe maximum dimensions relate to the configuration for magic images which have to be set in Page TSConfig:\n\n```\n# Page TSConfig\nRTE.default.buttons.image.options.magic {\n    # Default: 300\n    maxWidth = 1020\n    # Default: 1000\n    maxHeight = 800\n}\n```\n\nIf TSConfig settings don't render correctly from custom template extensions, add the settings directly to root page configuration.\n\n\n### Usage as lightbox with fluid_styled_content\n\n```\n# Template Constants\nstyles.content.textmedia.linkWrap.lightboxEnabled = 1\n```\n\n### Configure a default css class for every image\n\n```\n# TS Setup\n\nlib.parseFunc_RTE {\n    // default class for images in bodytext:\n    nonTypoTagStdWrap.HTMLparser.tags.img.fixAttrib.class {\n      default = my-custom-class\n    }\n}\n```\n\n### Image lazyload support\n\nThe extension supports [TYPO3 lazyload handling](https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/10.3/Feature-90426-Browser-nativeLazyLoadingForImages.html) (fluid_styled_content) for native browser lazyload.\n\n```\n# Template Constants type=options[lazy,eager,auto]\nstyles.content.image.lazyLoading = lazy\n```\n\n### Image Quality Selector\n\nThe image dialog includes a quality selector dropdown for optimal image processing:\n\n**Quality Options:**\n- **No Scaling** (1.0x) - Original file, no processing (best for newsletters, PDFs, SVG files)\n- **Standard** (1.0x) - Match display dimensions exactly\n- **Retina** (2.0x) - High-DPI displays (default, recommended for modern devices)\n- **Ultra** (3.0x) - Very sharp images for hero images and key visuals\n- **Print** (6.0x) - Print-quality output and professional photography\n\nQuality selection persists via `data-quality` HTML attribute. The selector automatically handles SVG dimension extraction from viewBox or width/height attributes.\n\n**See:** [Image Quality Selector Documentation](https://docs.typo3.org/p/netresearch/rte-ckeditor-image/main/en-us/CKEditor/Image-Quality-Selector.html) for complete technical details, use cases, and migration guide.\n\n### Using original images without processing (noScale)\n\nConfigure noScale globally via TypoScript to skip image processing:\n\n```typoscript\n# TypoScript Setup - Enable globally for all RTE images\nlib.parseFunc_RTE.tags.img.noScale = 1\n\n# Optional: Set file size threshold for auto-optimization\nlib.parseFunc_RTE.tags.img.noScale {\n    maxFileSizeForAuto = 2000000  # 2MB - prevents serving very large originals\n}\n```\n\n**Modern Approach:** Use the quality selector dropdown in the image dialog for per-image control. The `data-quality=\"none\"` attribute provides the same functionality as `noScale = 1` with better user experience.\n\n**Auto-Optimization:** The extension automatically skips processing when:\n- Requested dimensions match the original image dimensions\n- SVG files are detected (vector graphics always use original)\n- Quality selector is set to \"No Scaling\"\n\n### Allowed extensions\n\nBy default, the extensions from `$TYPO3_CONF_VARS['GFX']['imagefile_ext']` are allowed. However, you can override this for CKEditor by adding the following to your YAML configuration:\n\n```yaml\neditor:\n  externalPlugins:\n      typo3image:\n        allowedExtensions: \"jpg,jpeg,png\"\n```\n\n## Documentation\n\nThis project maintains three documentation tiers:\n\n### Official TYPO3 Documentation\n\n**Published Manual:** https://docs.typo3.org/p/netresearch/rte-ckeditor-image/main/en-us/\n\nFor integrators, administrators, and end users. Covers installation, configuration, troubleshooting, and usage.\n\n**Source:** [Documentation/](Documentation/) (RST format, automatically built and published)\n\n### AI Development Context\n\n**AI Agents \u0026 Developers:** `claudedocs/` directory (gitignored)\n\nTechnical knowledge base for AI-assisted development. Not tracked in git - generate per session if needed.\n\n### Project Essentials\n\n- **[AGENTS.md](AGENTS.md)** - AI development guide and build commands\n- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution guidelines\n- **[SECURITY.md](SECURITY.md)** - Security policy\n- **[Documentation/AGENTS.md](Documentation/AGENTS.md)** - TYPO3 documentation system guide\n\n## Development\n\n### DDEV Environment (Complete Testing Setup)\n\n```bash\n# Quick start with DDEV (includes TYPO3 + Bootstrap Package)\ngit clone https://github.com/netresearch/t3x-rte_ckeditor_image.git\ncd t3x-rte_ckeditor_image\nmake up                      # Start DDEV + complete setup (ONE COMMAND!)\n\n# Access your environment\n# - Overview:       https://rte-ckeditor-image.ddev.site/\n# - Documentation:  https://docs.rte-ckeditor-image.ddev.site/\n# - TYPO3 v13:      https://v13.rte-ckeditor-image.ddev.site/\n# - TYPO3 v14:      https://v14.rte-ckeditor-image.ddev.site/\n# - Backend:        [version].rte-ckeditor-image.ddev.site/typo3/\n# - Credentials:    admin / Joh316!!\n\n# Individual commands\nmake start                   # Start DDEV environment\nmake setup                   # Complete setup (docs + install)\nmake docs                    # Render extension documentation\n```\n\n**Included Packages:**\n- **Bootstrap Package** (v15.0+) - Automatically installed to provide frontend rendering infrastructure\n- **TYPO3 Styleguide** - UI pattern reference for testing\n- All packages pre-configured for immediate testing of:\n  - Image insertion and editing in RTE\n  - Click-to-enlarge functionality on frontend\n  - Caption editing (WYSIWYG mode)\n  - Image alignment and styling\n\n### Local Development (No DDEV)\n\n```bash\n# Quick start\ncomposer install\nmake help                    # See all available targets\n\n# Development workflow\nmake lint                    # Run all linters\nmake format                  # Fix code style\nmake test                    # Run tests\nmake ci                      # Full CI check (pre-commit)\n```\n\nSee [AGENTS.md](AGENTS.md) for complete development guide, code standards, and PR checklist.\n\n## Deployment\n\n- Developed on [GitHub](https://github.com/netresearch/t3x-rte_ckeditor_image)\n- [Composer repository](https://packagist.org/packages/netresearch/rte-ckeditor-image)\n- [TYPO3 Extension Repository](https://extensions.typo3.org/extension/rte_ckeditor_image)\n- New versions automatically uploaded to TER via GitHub Action when creating a release\n\n## Verifying Releases\n\nRelease tags are GPG-signed and include [SLSA Level 3](https://slsa.dev) provenance attestation for supply chain integrity.\n\n### Verify tag signature\n\n```bash\n# Verify the GPG signature on a release tag\ngit tag -v \u003crelease-tag\u003e\n```\n\n### Verify SLSA provenance\n\n```bash\n# Verify provenance of a release asset (when assets are attached)\ngh attestation verify \u003cdownloaded-file\u003e \\\n  --repo netresearch/t3x-rte_ckeditor_image\n```\n\n## About\n\nDeveloped and maintained by [Netresearch DTT GmbH](https://www.netresearch.de/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetresearch%2Ft3x-rte_ckeditor_image","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetresearch%2Ft3x-rte_ckeditor_image","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetresearch%2Ft3x-rte_ckeditor_image/lists"}