krecit / laravel-gemini-image
Laravel wrapper for krecit/gemini-image-core with automatic image optimization.
Requires
- php: >=8.1
- illuminate/support: ^9.0|^10.0|^11.0
- intervention/image: ^3.0|^4.0
- krecit/gemini-image-core: ^1.0
README
🌍 Read this in English | 🇪🇸 Leer en Español
🌍 English
An elegant Laravel wrapper that integrates the krecit/gemini-image-core package. This package is optimized for processing large image payloads (using Intervention Image) and preventing memory leaks in environments like Laravel Octane.
Features
- Seamless integration with Google Gemini (Imagen 4 and Gemini 2.5 Flash).
GeminiImageFacade for quick static usage.- On-the-fly compression to WebP.
- Automatic scaling (Scale down to 1200px) to prevent exceeding Google's payload limits.
- Octane Safe: Strict memory management (
unset()) to free up heavy binaries from RAM.
Installation
- Require the package via Composer:
composer require krecit/laravel-gemini-image
- Publish the configuration file:
php artisan vendor:publish --tag="gemini-image-config"
- Add your API Key in your Laravel
.envfile:
GEMINI_API_KEY="your_api_key_here"
Usage
The package automatically registers a Facade called GeminiImage.
1. Generate an image from scratch (Uses Imagen 4 model)
use KrecIT\LaravelGeminiImage\Facades\GeminiImage; use Illuminate\Support\Facades\Storage; // Returns raw binary image string $rawImageBinary = GeminiImage::generateImage('A futuristic landscape', '16:9'); // Save it using Laravel Storage Storage::disk('public')->put('futuristic.jpg', $rawImageBinary);
2. Generate an image with references (Uses Gemini 2.5 Flash Image)
The package automatically handles your uploaded files (Illuminate\Http\UploadedFile), compresses them to WebP, and passes them to Gemini.
use KrecIT\LaravelGeminiImage\Facades\GeminiImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; public function generateWithProduct(Request $request) { // Array of UploadedFile $files = $request->file('references'); // The package compresses to WebP, scales down, and frees RAM automatically $rawImageBinary = GeminiImage::generateImageWithReferences( 'Improve the lighting of this product and place it on a wooden table', $files, '1:1' ); Storage::disk('s3')->put('improved_product.jpg', $rawImageBinary); return response()->json(['success' => true]); }
🇪🇸 Español
Wrapper exclusivo para Laravel que integra el paquete krecit/gemini-image-core. Este paquete está optimizado para procesar grandes cargas de imágenes (usando Intervention Image) y prevenir fugas de memoria en entornos como Laravel Octane.
Características
- Integración fluida con Google Gemini (Imagen 4 y Gemini 2.5 Flash).
- Facade
GeminiImagepara uso estático rápido. - Compresión automática al vuelo (On-the-fly) a WebP.
- Redimensionamiento automático (Scale down a 1200px) para no exceder los límites de payload de Google.
- Octane Safe: Manejo estricto de memoria (
unset()) para liberar binarios pesados de la RAM.
Instalación
- Requiere el paquete vía Composer:
composer require krecit/laravel-gemini-image
- Publica el archivo de configuración:
php artisan vendor:publish --tag="gemini-image-config"
- Añade tu API Key en el archivo
.envde tu proyecto Laravel:
GEMINI_API_KEY="tu_api_key_aqui"
Uso Práctico
El paquete registra automáticamente un Facade llamado GeminiImage.
1. Generar una imagen desde cero (Usa modelo Imagen 4)
use KrecIT\LaravelGeminiImage\Facades\GeminiImage; use Illuminate\Support\Facades\Storage; // Devuelve el string binario crudo de la imagen $rawImageBinary = GeminiImage::generateImage('Un paisaje futurista', '16:9'); // Guardar en disco (Ejemplo usando S3 o Local) Storage::disk('public')->put('futurista.jpg', $rawImageBinary);
2. Generar una imagen con referencias (Usa Gemini 2.5 Flash Image)
El paquete se encarga automáticamente de recibir tus archivos subidos (Illuminate\Http\UploadedFile), comprimirlos a WebP, y pasarlos a Gemini.
use KrecIT\LaravelGeminiImage\Facades\GeminiImage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; public function generateWithProduct(Request $request) { // Array de UploadedFile $archivos = $request->file('references'); // El paquete comprime en WebP, hace scaleDown y libera la RAM automáticamente $rawImageBinary = GeminiImage::generateImageWithReferences( 'Mejora la iluminación de este producto y ponlo sobre una mesa de madera', $archivos, '1:1' ); Storage::disk('s3')->put('producto_mejorado.jpg', $rawImageBinary); return response()->json(['success' => true]); }