krecit/laravel-gemini-image

Laravel wrapper for krecit/gemini-image-core with automatic image optimization.

Maintainers

Package info

github.com/Abepk777/laravel-krecit-image

pkg:composer/krecit/laravel-gemini-image

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-06-01 16:25 UTC

This package is auto-updated.

Last update: 2026-06-01 16:27:00 UTC


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).
  • GeminiImage Facade 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

  1. Require the package via Composer:
composer require krecit/laravel-gemini-image
  1. Publish the configuration file:
php artisan vendor:publish --tag="gemini-image-config"
  1. Add your API Key in your Laravel .env file:
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 GeminiImage para 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

  1. Requiere el paquete vía Composer:
composer require krecit/laravel-gemini-image
  1. Publica el archivo de configuración:
php artisan vendor:publish --tag="gemini-image-config"
  1. Añade tu API Key en el archivo .env de 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]);
}