# 🎯 Multi-Image Generation Plan ## πŸ“‹ Übersicht ErmΓΆglicht es Nutzern, mehrere Bilder mit demselben Prompt zu generieren - ideal fΓΌr Variationen und das Finden des perfekten Ergebnisses. --- ## 🎨 Feature-Beschreibung ### Was es macht - **Gleicher Prompt, mehrere Outputs**: 1-5 Bilder mit einem Klick - **Verschiedene Seeds**: Jedes Bild bekommt einen anderen Random Seed fΓΌr Variation - **Batch-Integration**: Nutzt das existierende Batch System - **Quick Access**: VerfΓΌgbar in Generate Page und QuickGenerateBar ### Use Cases 1. **Variations Explorer**: "Zeig mir 4 verschiedene Versionen dieses Prompts" 2. **Best Shot Finder**: "Generiere 3 Bilder und ich wΓ€hle das Beste" 3. **Time Saver**: Einmal Setup, mehrere Ergebnisse 4. **A/B Testing**: Verschiedene Interpretationen desselben Prompts --- ## πŸ—οΈ Technische Architektur ### 1. Backend-Anpassungen #### Option A: Erweitere bestehende Functions (EMPFOHLEN) ```typescript // In generate-image function interface GenerateRequest { prompt: string; count?: number; // NEU: 1-5, default 1 // ... andere Parameter } // Wenn count > 1: Automatisch Batch erstellen if (request.count > 1) { // Create batch with same prompt, different seeds const prompts = Array(request.count).fill(null).map((_, i) => ({ text: request.prompt, negative_prompt: request.negative_prompt, seed: Math.floor(Math.random() * 1000000) + i })); // Call batch-generate return createBatch(prompts, settings); } ``` #### Option B: Dedicated Multi-Generate Function ```typescript // Neue Edge Function: multi-generate // Wrapper um batch-generate mit optimiertem Flow ``` ### 2. Datenbank-Anpassungen ```sql -- Erweitere image_generations fΓΌr Multi-Tracking ALTER TABLE image_generations ADD COLUMN IF NOT EXISTS multi_group_id UUID, ADD COLUMN IF NOT EXISTS multi_index INTEGER; -- Index fΓΌr grouped queries CREATE INDEX IF NOT EXISTS idx_image_generations_multi_group ON image_generations(multi_group_id, multi_index); -- View fΓΌr Multi-Generation Groups CREATE VIEW multi_generation_groups AS SELECT multi_group_id, prompt, COUNT(*) as total_count, COUNT(*) FILTER (WHERE status = 'completed') as completed_count, MIN(created_at) as created_at, MAX(completed_at) as completed_at, ARRAY_AGG(id ORDER BY multi_index) as image_ids FROM image_generations WHERE multi_group_id IS NOT NULL GROUP BY multi_group_id, prompt; ``` ### 3. Frontend Components #### A. Image Count Selector Component ```typescript // components/ImageCountSelector.tsx interface ImageCountSelectorProps { value: number; onChange: (count: number) => void; max?: number; disabled?: boolean; } // Visual Design: // [1] [2] [3] [4] [5] <- Pills/Buttons // oder // [-] 3 [+] <- Counter Style ``` #### B. Multi-Generation Progress ```typescript // components/MultiGenerationProgress.tsx // Zeigt Progress fΓΌr alle Images in der Gruppe // Grid-Layout mit Live-Updates ``` --- ## 🎨 UI/UX Design ### 1. Generate Page Integration ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Neues Bild generieren β”‚ β”‚ β”‚ β”‚ Prompt: [........................] β”‚ β”‚ β”‚ β”‚ 🎲 Anzahl Varianten β”‚ β”‚ [1] [2] [3] [4] [5] β”‚ β”‚ ℹ️ Erstelle mehrere Versionen β”‚ β”‚ β”‚ β”‚ Model: [...] β”‚ β”‚ Size: [...] β”‚ β”‚ β”‚ β”‚ [Generate 3 Images] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### 2. QuickGenerateBar Enhancement ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ πŸ’‘ [Prompt eingeben...] β”‚ β”‚ β”‚ β”‚ Varianten: [1] [2] [3] [4] [5] β”‚ β”‚ oder β”‚ β”‚ Varianten: [-] 2 [+] [Generate] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### 3. Progress Display ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Generiere 4 Varianten β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”‚ β”‚ β”‚ βœ… β”‚ β”‚ ⚑ β”‚ β”‚ ⏳ β”‚ β”‚ ⏳ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β”‚ β”‚ 1/4 2/4 3/4 4/4 β”‚ β”‚ β”‚ β”‚ Gesamt: β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘ 25% β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### 4. Results Gallery ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 4 Varianten generiert ✨ β”‚ β”‚ β”‚ β”‚ [Image][Image][Image][Image] β”‚ β”‚ β”‚ β”‚ Actions: β”‚ β”‚ [Save All] [Save Selected] β”‚ β”‚ [Favorite] [Generate More] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## πŸ“ Implementierungsschritte ### Phase 1: Backend (1 Tag) - [ ] Erweitere generate-image function um `count` parameter - [ ] Update batch-generate fΓΌr optimierten Multi-Flow - [ ] Datenbank-Migration fΓΌr multi_group tracking - [ ] Rate Limit Anpassung fΓΌr Multi-Generation ### Phase 2: UI Components (1 Tag) - [ ] ImageCountSelector Component - [ ] Integration in Generate Page - [ ] Integration in QuickGenerateBar - [ ] Multi-Generation Progress Component ### Phase 3: Flow Integration (1 Tag) - [ ] Hook: useMultiGeneration - [ ] Store updates fΓΌr Multi-Tracking - [ ] Results Gallery fΓΌr Multi-Groups - [ ] Error Handling fΓΌr partial failures ### Phase 4: Polish (0.5 Tag) - [ ] Loading States - [ ] Success Animations - [ ] Mobile Optimization - [ ] Testing & Bug Fixes --- ## πŸ”§ Implementation Details ### 1. Generate Page Changes ```typescript // app/(tabs)/generate.tsx const [imageCount, setImageCount] = useState(1); const handleGenerate = async () => { if (imageCount > 1) { // Use batch generation const prompts = Array(imageCount).fill(null).map(() => ({ text: prompt, negative_prompt: negativePrompt, // Random seeds for variation seed: Math.floor(Math.random() * 1000000) })); await createBatch(prompts, settings); } else { // Single generation as before await generateImage(...); } }; ``` ### 2. QuickGenerateBar Changes ```typescript // components/QuickGenerateBar.tsx const [quickCount, setQuickCount] = useState(1); // Add counter UI Varianten: setQuickCount(Math.max(1, quickCount - 1))}> {quickCount} setQuickCount(Math.min(5, quickCount + 1))}> ``` ### 3. Store Updates ```typescript // store/multiGenerationStore.ts interface MultiGenerationStore { activeGroups: Map; createMultiGeneration: ( prompt: string, count: number, settings: Settings ) => Promise; trackMultiProgress: (groupId: string) => void; } ``` --- ## 🎯 Konfiguration & Limits ### Default Settings ```typescript const MULTI_GENERATION_CONFIG = { MIN_COUNT: 1, MAX_COUNT: 5, DEFAULT_COUNT: 1, // UI Settings SHOW_IN_QUICK_BAR: true, SHOW_IN_GENERATE: true, // Behavior AUTO_GROUP_RESULTS: true, PARALLEL_PROCESSING: true, // Limits (zusΓ€tzlich zu Rate Limits) MAX_MULTI_PER_HOUR: 10, // Max 10 Multi-Generations pro Stunde }; ``` ### Rate Limit Considerations - Multi-Generation zΓ€hlt als N einzelne Generierungen - Spezielle Limits fΓΌr Multi-Generation mΓΆglich - Boost fΓΌr Premium Users --- ## πŸ“Š Success Metrics ### KPIs - **Adoption Rate**: % User die Multi-Gen nutzen - **Average Count**: Durchschnittliche Anzahl pro Multi-Gen - **Selection Rate**: Wie viele der generierten Bilder werden gespeichert - **Time Savings**: Zeit gespart vs. einzelne Generierungen ### User Feedback Points - Ist die UI intuitiv? - Ist die maximale Anzahl (5) ausreichend? - Soll es Presets geben (z.B. "Quick 3")? --- ## πŸš€ Future Enhancements ### V2 Features 1. **Smart Variations**: Leichte Prompt-Variationen automatisch 2. **Comparison View**: Side-by-side Vergleich 3. **Auto-Select Best**: AI wΓ€hlt das "beste" Bild 4. **Variation Templates**: Vordefinierte Variation-Sets 5. **Progressive Generation**: Erst 2, dann basierend auf Favorit weitere ### V3 Ideas - **Variation Tree**: Branching von Favoriten - **Style Matrix**: Grid mit Style x Subject Variationen - **Batch Templates**: Gespeicherte Multi-Gen Setups --- ## ⚠️ Edge Cases & Considerations ### Error Handling - Was wenn 3 von 5 fehlschlagen? - Partial Success UI - Retry nur fΓΌr failed ### Performance - Max 5 parallel to avoid overload - Staggered starts (1s delay) - Progress Updates batched ### UX Considerations - Clear cost indication (5 images = 5 credits) - Warning bei high count + large size - Option to cancel remaining --- ## πŸ“… Timeline **Tag 1**: Backend implementation **Tag 2**: Frontend components **Tag 3**: Integration & Testing **Tag 4**: Polish & Release **Total: 3.5 Tage** --- *Erstellt: Januar 2025*