aimeos/prisma

A powerful PHP package for integrating media related Large Language Models (LLMs) into your applications

Maintainers

Details

github.com/aimeos/prisma

Source

Issues

Installs: 113

Dependents: 1

Suggesters: 0

Security: 0

Stars: 4

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/aimeos/prisma

0.1.0 2025-11-13 16:20 UTC

README

Light-weight PHP package for integrating multi-media related Large Language Models (LLMs) into your applications using a unified interface.

Supported providers API usage
  • ensure: Ensures that the provider has implemented the method
  • has: Tests if the provider has implemented the method
  • model: Use the model passed by its name
  • withClientOptions: Add options for the Guzzle HTTP client
  • withSystemPrompt: Add a system prompt for the LLM
Image API
  • background: Replace background according to the prompt
  • describe: Describe the content of an image
  • detext: Remove all text from the image
  • erase: Erase parts of the image
  • imagine: Generate an image from the prompt
  • inpaint: Edit an image area according to a prompt
  • isolate: Remove the image background
  • relocate: Place the foreground object on a new background
  • repaint: Repaint an image according to the prompt
  • uncrop: Extend/outpaint the image
  • upscale: Scale up the image
  • vectorize: Creates embedding vectors from images

Supported providers

Images

background describe detext erase imagine inpaint isolate recognize relocate repaint uncrop upscale vectorize
Bedrock Titan - - - - yes yes yes - - - - - yes
Clipdrop yes - yes yes yes - yes - - - yes yes -
Cohere - - - - - - - - - - - - yes
Gemini - yes - - yes - - - - yes - - -
Ideogram beta beta - - beta beta - - - beta - beta -
Mistral - - - - - - - yes - - - - -
OpenAI - yes - - yes yes - - - - - - -
RemoveBG - - - - - - yes - yes - - - -
StabilityAI - - - yes yes yes yes - - - yes yes -
VertexAI - - - - yes yes - - - - - yes yes
VoyageAI - - - - - - - - - - - - yes

Installation

composer req aimeos/prisma

API usage

Basic usage:

use Aimeos\Prisma\Prisma;

$image = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->model( '<modelname>' ) // if model can be selected
    ->ensure( 'imagine' )
    ->imagine( 'a grumpy cat' )
    ->binary();

ensure

Ensures that the provider has implemented the method.

public function ensure( string $method ) : self
  • @param string $method Method name
  • @return Provider
  • @throws \Aimeos\Prisma\Exceptions\NotImplementedException

Example:

\Aimeos\Prisma\Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->ensure( 'imagine' );

has

Tests if the provider has implemented the method.

public function has( string $method ) : bool
  • @param string $method Method name
  • @return bool TRUE if implemented, FALSE if absent

Example:

\Aimeos\Prisma\Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->has( 'imagine' );

model

Use the model passed by its name.

Used if the provider supports more than one model and allows to select between the different models. Otherwise, it's ignored.

public function model( ?string $model ) : self
  • @param string|null $model Model name
  • @return self Provider interface

Example:

\Aimeos\Prisma\Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->model( 'dall-e-3' );

withClientOptions

Add options for the Guzzle HTTP client.

public function withClientOptions( array `$options` ) : self
  • @param array<string, mixed> $options Associative list of name/value pairs
  • @return self Provider interface

Example:

\Aimeos\Prisma\Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->withClientOptions( ['timeout' => 120] );

withSystemPrompt

Add a system prompt for the LLM.

It may be used by providers supporting system prompts. Otherwise, it's ignored.

public function withSystemPrompt( ?string $prompt ) : self
  • @param string|null $prompt System prompt
  • @return self Provider interface

Example:

\Aimeos\Prisma\Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->withSystemPrompt( 'You are a professional illustrator' );

Image API

Most methods require an image object as input which contains a reference to the image that should be processed. This object can be created by:

use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.php', 'image/png' );
$image = Image::fromLocalPath( 'path/to/image.png', 'image/png' );
$image = Image::fromBinary( 'PNG...', 'image/png' );
$image = Image::fromBase64( 'UE5H...', 'image/png' );

// Laravel only:
$image = Image::fromStoragePath( 'path/to/image.png', 'public', 'image/png' );

The last parameter of all methods (mime type) is optional. If it's not passed, the file content will be retrieved to determine the mime type if reqested.

Note: It's best to use fromUrl() if possible because all other formats (binary and base64) can be derived from the URL content but URLs can't be created from binary/base64 data.

The methods return a FileResponse or TextResponse object that contains the returned data and optional meta and usage data.

File data is available by:

$file = $response->binary(); // from binary, base64 and URL
$base64 = $response->base64(); // from binary, base64 and URL
$url = $response->url(); // only if URL is returned, otherwise NULL

URLs are automatically converted to binary and base64 data if requested and conversion between binary and base64 data is done on request too.

Meta data is available by:

$meta = $response->meta();

It returns an associative array whose content totally depends on the provider.

Usage data is available by:

$usage = $response->usage();

It returns an associative array whose content depends on the provider. If the provider returns usage information, the used array key is available and contains a number. What the number represents depdends on the provider too.

background

Replace image background with a background described by the prompt.

public function background( Image $image, string $prompt, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param string $prompt Prompt describing the new background
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->background( $image, 'Golden sunset on a caribbean beach' );

describe

Describe the content of an image.

public function describe( Image $image, ?string $lang = null, array $options = [] ) : TextResponse
  • @param Image $image Input image object
  • @param string|null $lang ISO language code the description should be generated in
  • @param array<string, mixed> $options Provider specific options
  • @return TextResponse Response text

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->describe( $image, 'de' );

detext

Remove all text from the image.

public function detext( Image $image, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

  • Clipdrop

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->detext( `$image` );

erase

Erase parts of the image.

public function erase( Image $image, Image $mask, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param Image $mask Mask image object
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

The mask must be an image with black parts (#000000) to keep and white parts (#FFFFFF) to remove.

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );
$mask = Image::fromBinary( 'PNG...' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->erase( $image, $mask );

imagine

Generate an image from the prompt.

public function imagine( string $prompt, array $images = [], array $options = [] ) : FileResponse
  • @param string $prompt Prompt describing the image
  • @param array<int, \Aimeos\Prisma\Files\Image> $images Associative list of file name/Image instances
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->imagine( 'Futuristic robot looking at a dashboard' );

inpaint

Edit an image by inpainting an area defined by a mask according to a prompt.

public function inpaint( Image $image, Image $mask, string $prompt, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param Image $mask Input mask image object
  • @param string $prompt Prompt describing the changes
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

The mask must be an image with black parts (#000000) to keep and white parts (#FFFFFF) to edit.

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );
$mask = Image::fromBinary( 'PNG...' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->inpaint( $image, $mask, 'add a pink flamingo' );

isolate

Remove the image background.

public function isolate( Image $image, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->isolate( `$image` );

recognize

Recognizes the text in the given image (OCR).

public function recognize( Image $image, array $options = [] ) : TextResponse;
  • @param Image $image Input image object
  • @param array<string, mixed> $options Provider specific options
  • @return TextResponse Response text object

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->recognize( `$image` );

relocate

Place the foreground object on a new background.

public function relocate( Image $image, Image $bgimage, array $options = [] ) : FileResponse
  • @param Image $image Input image with foreground object
  • @param Image $bgimage Background image
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );
$bgimage = Image::fromUrl( 'https://example.com/background.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->relocate( $image, $bgimage );

repaint

Repaint an image according to the prompt.

public function repaint( Image $image, string $prompt, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param string $prompt Prompt describing the changes
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->repaint( $image, 'Use a van Goch style' );

uncrop

Extend/outpaint the image.

public function uncrop( Image $image,  int $top, int $right, int $bottom, int $left, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param int $top Number of pixels to extend to the top
  • @param int $right Number of pixels to extend to the right
  • @param int $bottom Number of pixels to extend to the bottom
  • @param int $left Number of pixels to extend to the left
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->uncrop( $image, 100, 200, 0, 50 );

upscale

Scale up the image.

public function upscale( Image $image, int $factor, array $options = [] ) : FileResponse
  • @param Image $image Input image object
  • @param int $factor Upscaling factor between 2 and the maximum value supported by the provider
  • @param array<string, mixed> $options Provider specific options
  • @return FileResponse Response file

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$image = Image::fromUrl( 'https://example.com/image.png' );

$response = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->upscale( $image, 4 );

vectorize

Creates embedding vectors of the images' content.

public function vectorize( array $images, ?int $size = null, array $options = [] ) : VectorResponse
  • @param array<int, \Aimeos\Prisma\Files\Image> $images List of input image objects
  • @param int|null $size Size of the resulting vector or null for provider default
  • @param array<string, mixed> $options Provider specific options
  • @return VectorResponse Response vector object

Supported options:

Example:

use Aimeos\Prisma\Prisma;
use \Aimeos\Prisma\Files\Image;

$images = [
    Image::fromUrl( 'https://example.com/image.png' ),
    Image::fromUrl( 'https://example.com/image2.png' ),
];

$vectors = Prisma::image()
    ->using( '<provider>', ['api_key' => 'xxx'])
    ->vectorize( $images, 512 )
    ->vectors();