---
title: "Aimeos Prisma: una API de PHP para los LLM que trabajan con imagen, audio y vídeo"
excerpt: "Prisma es un paquete PHP que unifica 39 proveedores de LLM bajo una misma interfaz, con operaciones que el AI SDK de Laravel no cubre: OCR, inpainting, quitar fondos, separar pistas de audio y generar vídeo."
date: "2026-09-10T11:00:00.000Z"
category: "PHP"
tech_article: true
author:
  name: "angel cruz"
  picture: "/images/me/angel-cruz.png"
ogImage:
  url: "/images/open-graph/php-opengraph-image.png"
seo_title: "Aimeos Prisma: API unificada de LLM multimedia en PHP"
seo_description: "Qué es aimeos/prisma, el paquete PHP con una API unificada para LLM de texto, imagen, audio y vídeo: instalación, providers, tools y cuándo usarlo junto al AI SDK de Laravel."
---

**Prisma (`aimeos/prisma`) es un paquete PHP que pone 39 proveedores de LLM detrás de una sola interfaz, y su diferencia está en lo multimedia: OCR, inpainting, borrar fondos, separar las pistas de un audio o generar vídeo.** Con el AI SDK de Laravel se solapa en texto y embeddings, y a partir de ahí cubre operaciones que el SDK oficial ni intenta.

Si tu problema es un agente conversacional con herramientas, memoria y colas, [el AI SDK de Laravel](/post/laravel-13-novedades) es la respuesta correcta y este artículo no va contigo. Si tu problema es "necesito leer el texto de 4.000 facturas escaneadas" o "hay que quitar el fondo de las fotos de producto", entonces el SDK oficial no tiene ese método y Prisma sí.

## Qué es y de dónde sale

Prisma lo publica Aimeos, la gente detrás del paquete de ecommerce del mismo nombre. Es una librería MIT y el repositorio se creó el 28 de octubre de 2025. Al escribir esto lleva 227 estrellas en GitHub.

Va rápido: la primera versión, 0.1.0, se publicó el 13 de noviembre de 2025, y la 0.7.0 el 8 de septiembre de 2026, doce versiones en menos de un año. Sigue en el rango `0.x`, así que la API todavía puede moverse entre versiones menores.

Sus dependencias son cortas: PHP 8.2 o superior, Guzzle 7, y las extensiones `curl`, `gd` y `fileinfo`. Esa `ext-gd` está ahí porque el paquete manipula imágenes en tu propia máquina, no solo pasa cadenas de texto a una API.

Y no trae service provider de Laravel. No hay bloque `extra.laravel` en su `composer.json`, ni facade, ni fichero de configuración publicable. Es una librería PHP normal, y en Laravel la usas como usarías cualquier otra: resolviéndola desde el contenedor o instanciándola donde la necesites.

## Instalación

```bash
composer req aimeos/prisma
```

Y el patrón básico, tal cual aparece en su README:

```php
use Aimeos\Prisma\Prisma;

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

La cadena se lee sola: eliges modalidad (`image`, `text`, `audio`, `video`), eliges proveedor con sus credenciales, opcionalmente el modelo, y llamas a la operación.

El eslabón interesante es `ensure()`. Como cada proveedor implementa un subconjunto distinto de operaciones, `ensure('imagine')` falla de forma explícita si el proveedor elegido no implementa ese método, antes de gastar una llamada de red. Su hermano `has()` hace la misma comprobación devolviendo un booleano, que es lo que quieres si vas a elegir proveedor en tiempo de ejecución.

## Las cuatro APIs

Las operaciones, por modalidad:

Imagen, 13 operaciones: `imagine` genera desde un prompt, `describe` describe el contenido, `recognize` hace OCR, `inpaint` edita una zona concreta según un prompt, `erase` borra partes, `isolate` quita el fondo, `background` lo reemplaza según un prompt, `relocate` coloca el objeto en primer plano sobre otro fondo, `repaint` repinta la imagen entera, `detext` elimina todo el texto, `uncrop` extiende el encuadre, `upscale` escala y `vectorize` genera embeddings de la imagen.

Audio, 6: `speak` (texto a voz), `transcribe` (voz a texto), `describe`, `revoice` cambia la voz de un audio, `denoise` quita ruido y `demix` separa un audio en sus pistas individuales.

Vídeo, 6: `imagine`, `describe`, `extend` continúa un vídeo según un prompt, `repaint`, `uncrop` y `upscale`.

Texto, 5: `write`, `stream`, `structure` para salida estructurada con un esquema, `translate` y `vectorize` para embeddings.

Un ejemplo real, OCR sobre una imagen remota:

```php
use Aimeos\Prisma\Prisma;
use Aimeos\Prisma\Files\Image;

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

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

$text = $textResponse->text();
```

Y embeddings de un lote de textos, con el tamaño del vector como segundo argumento:

```php
$vectorResponse = Prisma::text()
    ->using( 'openai', ['api_key' => 'xxx'] )
    ->ensure( 'vectorize' )
    ->vectorize( ['The quick brown fox', 'jumps over the lazy dog'], 256 );

$vectors = $vectorResponse->vectors();
```

Esos vectores son los que acabas guardando en una columna vectorial para hacer [búsqueda semántica en Laravel con MariaDB](/post/laravel-mariadb-vector-busqueda-semantica).

## La tabla de proveedores

39 proveedores no significa 39 proveedores para todo. El README trae una matriz por modalidad, marcando cada celda como `yes`, `beta` o vacía, y es lo primero que hay que mirar antes de decidir nada:

- OCR (`recognize`) solo lo implementan Mistral y OpenRouter.
- Separar pistas de audio (`demix`) y quitar ruido (`denoise`), solo AudioPod.
- Quitar el fondo de una imagen (`isolate`) lo tienen Bedrock Titan, Clipdrop, Ideogram, Photoroom, Recraft, RemoveBG y StabilityAI.
- Casi todo el vídeo está en `beta`.

Es la realidad del mercado, donde nadie hace bien las veinte cosas. Lo que aporta Prisma es que cambiar de proveedor para una operación concreta sea cambiar una cadena de texto, y que `ensure()` te avise si te equivocas.

## Tools y esquemas

Prisma también hace bucles de herramientas, y ahí sí solapa con el SDK de Laravel, aunque con una vuelta de tuerca:

```php
$tool = Tools::laravel( new MyLaravelTool() );
$tool = Tools::laravel( MyLaravelTool::class );
```

`Tools::laravel()` acepta herramientas que extienden `\Laravel\Mcp\Server\Tool` o implementan `\Laravel\Ai\Contracts\Tool`. Si le pasas el nombre de la clase, la instancia se resuelve por el contenedor de Laravel, con sus dependencias inyectadas. O sea: las herramientas que ya escribiste para [tu servidor MCP](/post/mcp-para-laravel) o para el AI SDK se reutilizan sin reescribirlas. Hay un equivalente para Symfony, `Tools::symfony()`, con clases anotadas con `#[AsTool]`.

Para herramientas propias, el esquema se declara con un builder:

```php
use Aimeos\Prisma\Schema\Schema;
use Aimeos\Prisma\Tools;

$tool = Tools::make( 'weather', 'Get current weather', Schema::for( 'weather', [
    'city' => Schema::string()->description( 'City name' )->required(),
] ), fn( $args ) => json_encode( ['temp' => '22°C', 'city' => $args['city']] ) );

$response = Prisma::text()
    ->using( 'openai', ['api_key' => 'xxx'] )
    ->withTools( [$tool] )
    ->withMaxSteps( 5 )
    ->write( 'What is the weather in Berlin?' );
```

`withMaxSteps()` limita los pasos del bucle de herramientas, y su valor por defecto es 25. Bajarlo es la forma directa de poner un techo al gasto de una petición que se puede ir de las manos. Cada herramienta individual admite además su propio límite con `->max(3)`.

## Prisma o el AI SDK de Laravel: cómo decidir

La tabla de soporte del AI SDK de Laravel 13 cubre siete áreas: texto, imágenes, TTS, STT, embeddings, reranking y ficheros. Genera imágenes con `Image::of(...)->generate()` sobre OpenAI, Gemini o xAI, y ahí se acaba lo que hace con una imagen.

Quédate solo en `laravel/ai` si lo que construyes son agentes: conversaciones persistidas en base de datos, subagentes, middleware, aprobación humana de herramientas, streaming a la vista, encolado de trabajos, herramientas MCP, failover entre proveedores y helpers de testing. Nada de eso está en Prisma, y reimplementarlo sería un error.

Suma Prisma cuando el requisito sea una operación multimedia que el SDK no tiene: OCR, edición de imagen por zonas, quitar o cambiar fondos, escalar, extender el encuadre, separar pistas de audio, cambiar una voz, o cualquier cosa con vídeo. Es el hueco que el SDK deja abierto.

Lo que sí evitaría es meter Prisma solo para hacer llamadas de texto en un proyecto Laravel que ya tiene el AI SDK configurado. Serían dos configuraciones de credenciales, dos formas de testear y dos sitios donde mirar cuando algo falle, a cambio de nada.

Y como es un `0.x`, fija la versión en tu `composer.json` y lee el diff antes de subir de menor.

## Preguntas frecuentes

### ¿Qué es Aimeos Prisma?

Un paquete PHP con licencia MIT que integra modelos de lenguaje de texto y multimedia bajo una interfaz unificada. Cubre cuatro modalidades (texto, imagen, audio y vídeo) sobre 39 proveedores, y se instala con `composer req aimeos/prisma`.

### ¿Prisma funciona con Laravel?

Sí, como cualquier librería PHP. No trae service provider ni auto-discovery, así que no hay configuración que publicar: lo instancias donde lo necesites o lo registras tú en el contenedor. Sus herramientas sí saben aceptar clases de `laravel/ai` y de `laravel/mcp` a través de `Tools::laravel()`.

### ¿Prisma reemplaza al AI SDK de Laravel?

No. El AI SDK cubre agentes, conversaciones persistidas, subagentes, colas, MCP, aprobación humana de herramientas y testing, y nada de eso está en Prisma. Prisma cubre operaciones multimedia que el SDK no tiene: OCR, inpainting, quitar fondos, escalar imágenes, separar audio o generar vídeo. Conviven bien.

### ¿Qué necesito para instalarlo?

PHP 8.2 o superior, Guzzle 7 y las extensiones `curl`, `gd` y `fileinfo`. La extensión `gd` es obligatoria porque el paquete manipula imágenes localmente.

### ¿Puedo hacer OCR en PHP con Prisma?

Sí, con el método `recognize()` de la API de imagen. Según la matriz de proveedores de su README, esa operación la implementan Mistral y OpenRouter.

### ¿Cómo evito llamar a un proveedor que no soporta la operación?

Con `ensure('metodo')`, que falla de forma explícita antes de la llamada de red, o con `has('metodo')`, que devuelve un booleano y sirve para elegir proveedor en tiempo de ejecución.

## Fuentes

- [README de `aimeos/prisma`](https://github.com/aimeos/prisma), con la matriz de proveedores por modalidad y los ejemplos de cada método
- [`composer.json` de `aimeos/prisma`](https://github.com/aimeos/prisma/blob/master/composer.json), requisitos y licencia
- [aimeos/prisma en Packagist](https://packagist.org/packages/aimeos/prisma), historial de versiones y fechas de publicación
- [AI SDK, documentación de Laravel 13.x](https://laravel.com/docs/13.x/ai-sdk), tabla de soporte por proveedor y funcionalidad

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://www.angelcruz.dev/sitemap.md)

Canónico HTML: [https://www.angelcruz.dev/post/aimeos-prisma-php-llm-multimedia-laravel](https://www.angelcruz.dev/post/aimeos-prisma-php-llm-multimedia-laravel)
