# π― 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*