PHPackages                             in2code/texter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. in2code/texter

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

in2code/texter
==============

Using AI to generate texts in TYPO3 backend

2.0.0(4mo ago)3163↓25%1[1 PRs](https://github.com/in2code-de/texter/pulls)GPL-2.0-or-laterPHPPHP ^8.2 || ^8.3

Since Dec 6Pushed 4mo agoCompare

[ Source](https://github.com/in2code-de/texter)[ Packagist](https://packagist.org/packages/in2code/texter)[ Docs](https://github.com/in2code-de/texter)[ RSS](/packages/in2code-texter/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (20)Versions (3)Used By (0)

Texter - AI generated texts in TYPO3 with Google Gemini
=======================================================

[](#texter---ai-generated-texts-in-typo3-with-google-gemini)

Table of Contents
-----------------

[](#table-of-contents)

- [Introduction](#introduction)
- [Google Gemini API](#google-gemini-api)
- [Installation](#installation)
- [Custom LLM Integration (like ChatGPT, Claude, Mistral, etc.)](#custom-llm-integration-like-chatgpt-claude-mistral-etc)
- [Changelog and breaking changes](#changelog-and-breaking-changes)
- [Contribution with ddev](#contribution-with-ddev)

Introduction
------------

[](#introduction)

Add AI integration to TYPO3 backend. We simply added a CKEditor plugin to generate texts from AI (Gemini).

Example integration into TYPO3 backend.

Example Video [![documentation_video_rte.gif](Documentation/Images/documentation_video_rte.gif)](Documentation/Images/documentation_video_rte.gif)Better quality:

Video image #1 [![documentation_screenshot_rte1.png](Documentation/Images/documentation_screenshot_rte1.png)](Documentation/Images/documentation_screenshot_rte1.png)

Video image #2 [![documentation_screenshot_rte2.png](Documentation/Images/documentation_screenshot_rte2.png)](Documentation/Images/documentation_screenshot_rte2.png)

Video image #3 [![documentation_screenshot_rte3.png](Documentation/Images/documentation_screenshot_rte3.png)](Documentation/Images/documentation_screenshot_rte3.png)

Video image #4 [![documentation_screenshot_rte4.png](Documentation/Images/documentation_screenshot_rte4.png)](Documentation/Images/documentation_screenshot_rte4.png)

Google Gemini API
-----------------

[](#google-gemini-api)

- To use the extension, you need a **Google Gemini API** key. You can register for one at .
- Alternatively, you can implement your own LLM provider (see [Custom LLM Integration](#custom-llm-integration-like-chatgpt-claude-mistral-etc) below).

Installation
------------

[](#installation)

### With composer

[](#with-composer)

```
composer req in2code/texter

```

### Main configuration

[](#main-configuration)

After that, you have to set some initial configuration in Extension Manager configuration:

TitleDefault valueDescriptionpromptPrefix-Prefix text that should be always added to the prompt at the beginningapiKey-Google Gemini API key. You can let this value empty and simply use ENV\_VAR "GOOGLE\_API\_KEY" instead if you want to use CI pipelines for this settingNote: It's recommended to use ENV vars for in2code/imager instead of saving the API-Key in Extension Manager configuration

```
GOOGLE_API_KEY=your_api_key_from_google

```

### RTE configuration

[](#rte-configuration)

Per default, in2code/texter sets a default RTE configuration via Page TSConfig:

```
RTE.default.preset = texter

```

If you want to overrule this default setting, you can require in2code/texter in your sitepackage (to ensure that your extension is loaded after texter) and define a different default preset. Check file [Texter.yaml](Configuration/RTE/Texter.yaml) for an example how to add texter to your RTE configuration.

**Hint** You can also use texter for selected RTE fields in backend. Example Page TSConfig:

```
RTE.config.tt_content.bodytext.preset = texter
RTE.config.tx_news_domain_model_news.bodytext.preset = texter

```

Custom LLM Integration (like ChatGPT, Claude, Mistral, etc.)
------------------------------------------------------------

[](#custom-llm-integration-like-chatgpt-claude-mistral-etc)

Texter uses a factory pattern to allow custom LLM providers. By default, it uses Google Gemini, but you can easily integrate other AI services (OpenAI, Claude, local models, etc.).

### Implementing a Custom LLM Repository

[](#implementing-a-custom-llm-repository)

1. Create a custom repository class implementing `RepositoryInterface` - see example for OpenAI ChatGPT:

```
