Idee 1: AI-beeldstudio

← Alle ideeën

Een eigen "Midjourney" voor het bedrijf: beelden maken en bewerken met AI, met vaste stijlen (presets) zodat alles in de huisstijl blijft, en een galerij voor het hele team. Denk aan productfoto's, social-posts, sfeerbeelden voor een website.

Wow-moment

Kies preset "Productfoto op marmer", typ "rode koffiemok", klik Maak 4 varianten: de workers maken ze tegelijk en ze verschijnen één voor één in de galerij. Daarna: upload een eigen foto en zeg "zet hem op een strand".

Gegevens

Tabel Kolommen
presets name, description, prompt_template (met {onderwerp}), aspect_ratio (vierkant, liggend, staand), model
generations preset_id (nullable), user_id (nullable), prompt, final_prompt, source_path (bij bewerken), status (wachten, bezig, klaar, fout), error, image_path, seconds, favorite (bool)
collections (optioneel) name; koppeltabel collection_generation

Pagina's

  1. Studio (/studio): links preset-keuze (kaarten met voorbeeldbeeld), prompt-veld, aantal (1-4), beeldverhouding; rechts de laatste generaties in een <x-live>-raster dat elke 2 s ververst (status "bezig" = skeleton-kaart).
  2. Galerij (/gallery): alle beelden, filter op preset en favoriet, klik = groot (Alpine-modal) met prompt, knoppen "Download", "Favoriet", "Opnieuw met variatie", "Bewerk".
  3. Presets (/presets): lijst + toevoegen/bewerken (alleen voor de beheerder als APP_AUTH=demo).
  4. Dashboard (_live): aantal beelden vandaag, populairste preset, laatste 6 beelden.

Bouwvolgorde

  1. Migraties, modellen, seeder met 6 presets (Productfoto op marmer, Lifestyle buiten, Social post vlak met tekstruimte, Isometrische illustratie, Zwart-wit editorial, Kerst-sfeer) en prompt_template's.
  2. Job GenerateImage (één generation): roept Requesty aan (zie hieronder), slaat de PNG op in storage/app/public/generations/{id}.png, zet status en seconds. Fout: error = Ai::friendlyError($e).
  3. Studio-pagina: formulier maakt N generations met status wachten en dispatcht N jobs (10 workers = tegelijk).
  4. Galerij + modal + download (Storage::disk('public')->download(...)).
  5. Bewerken: upload of kies een bestaand beeld als bron, prompt "zet hem op een strand" (edit-endpoint hieronder).
  6. Extra's als er tijd is: "Verbeter mijn prompt" (tekst-AI herschrijft de prompt), collecties, beeld beschrijven met vision (alt-tekst voor de website), batch: een lijst van 10 producten in één keer.

AI: beelden via Requesty

Gebruik voor beelden niet Image::of() van de Laravel AI SDK (die staat op een provider zonder sleutel), maar roep Requesty direct aan met Http: $key = config('ai.providers.requesty.key') en $url = config('ai.providers.requesty.url'). Beschikbare beeldmodellen: Http::withToken($key)->get("{$url}/models") en filter op image (bijv. azure/openai/gpt-image-1.5, vertex/google/gemini-3-pro-image-preview). Zet het gekozen model in config/ai.php bij 'models' => ['image' => ['default' => env('AI_IMAGE_MODEL', '...')]] en lees het met config('ai.providers.requesty.models.image.default').

// Nieuw beeld (OpenAI-stijl images-endpoint)
$response = Http::withToken($key)->timeout(120)->post("{$url}/images/generations", [
    'model' => $model,                      // bv. azure/openai/gpt-image-1.5
    'prompt' => $finalPrompt,
    'n' => 1,
    'size' => '1024x1024',                    // alleen deze drie: vierkant 1024x1024, liggend 1536x1024, staand 1024x1536
])->throw()->json();

$data = $response['data'][0];
$png = isset($data['b64_json']) ? base64_decode($data['b64_json']) : Http::get($data['url'])->body();
Storage::disk('public')->put("generations/{$generation->id}.png", $png);

// Bewerken met een bronbeeld (multipart)
$response = Http::withToken($key)->timeout(120)
    ->attach('image[]', Storage::disk('public')->get($generation->source_path), 'bron.png')
    ->post("{$url}/images/edits", ['model' => $model, 'prompt' => $prompt, 'size' => '1024x1024'])
    ->throw()->json();

Gemini-beeldmodellen gaan via /chat/completions met image_config (aspect_ratio); het beeld staat dan in choices.0.message.images.0.image_url.url als data:image/png;base64,.... Werkt het ene model niet, probeer het andere. Test eerst één aanroep met php artisan tinker voordat je de pagina bouwt.

Demo-data

Seeder met de presets. Laat bij het seeden geen beelden genereren (kost tijd en geld); maak vóór de demo zelf 8 tot 12 beelden via de studio, dan is de galerij gevuld.

Demo (3 minuten)

  1. "Onze marketing wacht dagen op beelden." 2. Preset kiezen, prompt, 4 varianten: live verschijnen.
  2. Eén favoriet, bewerken: "op een strand". 4. Galerij en dashboard: wat het team deze avond maakte.

Let op

  • Beelden kosten per stuk geld: zet een maximum van 4 per klik.
  • Beeldgeneratie duurt 5 tot 30 seconden: altijd via een job, nooit in het verzoek zelf.
  • Geen andere beelddiensten (fal, Midjourney, Replicate): alleen Requesty.

Dit idee kiezen? Zeg tegen je AI-agent: "We bouwen Idee 1: AI-beeldstudio".