--- name: wedding-immortalist description: Transform thousands of wedding photos and hours of footage into an immersive 3D Gaussian Splatting experience with theatre mode replay, face-clustered guest roster, and AI-curated best photos per person. Expert in 3DGS pipelines, face clustering, aesthetic scoring, and adaptive design matching the couple's wedding theme (disco, rustic, modern, LGBTQ+ celebrations). Activate on "wedding photos", "wedding video", "3D wedding", "Gaussian Splatting wedding", "wedding memory", "wedding immortalize", "face clustering wedding", "best wedding photos". NOT for general photo editing (use native-app-designer), non-wedding 3DGS (use drone-inspection-specialist), or event planning (not a wedding planner). allowed-tools: Read,Write,Edit,Bash,Grep,Glob,WebFetch metadata: category: AI & Machine Learning pairs-with: - skill: photo-content-recognition-curation-expert reason: Curate wedding photos - skill: event-detection-temporal-intelligence-expert reason: Detect wedding events tags: - wedding - 3dgs - gaussian-splatting - face-clustering - memories --- # Wedding Immortalist Transform wedding photos and video into an eternal, immersive 3D experience. Create living memories that let couples and guests relive the magic forever. ## When to Use This Skill **Use for:** - Processing thousands of wedding photos into 3DGS scenes - Creating theatre-mode experiences where ceremony/reception moments play in-place - Building face-clustered guest rosters with best-photo selection - Matching design aesthetics to wedding themes (disco, rustic, beach, modern, queer celebrations) - AI-curated photo selection per guest with aesthetic scoring **NOT for:** - General photo editing → use native-app-designer - Non-wedding 3DGS → use drone-inspection-specialist - Event planning → not a wedding planner - Video editing without 3D reconstruction ## Core Pipeline ``` ┌─────────────────────────────────────────────────────────────────┐ │ WEDDING IMMORTALIST PIPELINE │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. INGEST 2. RECONSTRUCT 3. CLUSTER │ │ ├─ Photos (1000s) ├─ COLMAP SfM ├─ Face detect │ │ ├─ Video (hours) ├─ 3DGS training ├─ Embeddings │ │ └─ Audio/speeches └─ Scene merge └─ Identity link │ │ │ │ 4. CURATE 5. DESIGN 6. PRESENT │ │ ├─ Aesthetic score ├─ Theme extract ├─ Web viewer │ │ ├─ Per-person best ├─ Color palette ├─ Theatre mode │ │ └─ Moment detect └─ Typography └─ Guest roster │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ## Theme-Adaptive Design ### Theme Detection & Matching Every wedding has a unique aesthetic. Extract and honor it: | Theme Type | Color Palette | Typography | UI Elements | |------------|---------------|------------|-------------| | **70s Disco** | Gold, orange, burnt sienna, deep purple | Groovy script, bold sans | Mirror balls, starbursts, warm gradients | | **Rustic/Barn** | Earth tones, sage, cream, wood | Serif, hand-lettered | Burlap textures, wildflower accents | | **Beach/Coastal** | Ocean blues, sand, coral, seafoam | Light sans, script | Shell motifs, wave patterns | | **Modern Minimal** | Black, white, metallics | Clean geometric sans | Sharp lines, negative space | | **Queer Joy** | Rainbow spectrums, bold colors | Expressive, varied | Pride elements, celebration maximalism | | **Cultural Fusion** | Per tradition | Traditional + modern | Cultural motifs, heritage patterns | ### Extracting Theme from Photos ```python # Theme extraction signals THEME_SIGNALS = { 'color_palette': 'Dominant colors from venue, florals, attire', 'lighting_mood': 'Warm/cool, natural/dramatic, string lights/chandeliers', 'decor_elements': 'Rustic/modern/vintage/eclectic', 'attire_style': 'Traditional/non-traditional, formal/casual', 'cultural_markers': 'Religious symbols, cultural traditions', 'era_aesthetic': '70s disco, 20s gatsby, etc.' } ``` ## 3D Gaussian Splatting Pipeline ### Photo/Video Ingestion ``` Optimal Input Strategy: ├── Video: Extract 2-3 fps (80% overlap minimum) ├── Photos: Include ALL photographer shots ├── Phone photos: Guest uploads (georeferenced bonus) └── Coverage: Ceremony + reception + all spaces Quality Thresholds: ├── Minimum images per space: 50-100 ├── Overlap requirement: 60-80% ├── Blur rejection: Laplacian variance < 100 = skip └── Exposure: Reject severe over/underexposure ``` ### COLMAP Structure from Motion ```bash # Feature extraction colmap feature_extractor \ --database_path database.db \ --image_path images/ \ --ImageReader.single_camera 0 \ --SiftExtraction.max_image_size 3200 # Exhaustive matching for comprehensive coverage colmap exhaustive_matcher \ --database_path database.db \ --SiftMatching.guided_matching 1 # Sparse reconstruction colmap mapper \ --database_path database.db \ --image_path images/ \ --output_path sparse/ # Dense reconstruction (optional, for mesh) colmap image_undistorter ... colmap patch_match_stereo ... ``` ### 3DGS Training ```python # Wedding-optimized 3DGS settings WEDDING_3DGS_CONFIG = { 'iterations': 50_000, # High quality for permanent archive 'densify_from_iter': 500, 'densify_until_iter': 15_000, 'densification_interval': 100, 'opacity_reset_interval': 3000, 'sh_degree': 3, # Full spherical harmonics for lighting 'percent_dense': 0.01, 'densify_grad_threshold': 0.0002, } # Multi-space merge strategy SPACES = ['ceremony', 'cocktail_hour', 'reception', 'photo_booth', 'dance_floor'] # Train each separately, then create unified navigation ``` ## Face Clustering System ### Pipeline ``` ┌────────────────────────────────────────────────────────┐ │ FACE CLUSTERING PIPELINE │ ├────────────────────────────────────────────────────────┤ │ 1. Detection (RetinaFace/MTCNN) │ │ └─ All faces in all photos │ │ 2. Alignment (5-point landmark) │ │ └─ Standardize for embedding │ │ 3. Embedding (ArcFace/AdaFace) │ │ └─ 512-dim identity vector per face │ │ 4. Clustering (HDBSCAN) │ │ └─ Group by identity, handle edge cases │ │ 5. Identity Linking │ │ └─ Match to couple, wedding party, family, guests │ │ 6. Best Photo Selection │ │ └─ Aesthetic scoring per cluster │ └────────────────────────────────────────────────────────┘ ``` ### Clustering Parameters ```python CLUSTERING_CONFIG = { 'min_cluster_size': 3, # At least 3 photos to form identity 'min_samples': 2, 'metric': 'cosine', 'cluster_selection_epsilon': 0.3, 'cluster_selection_method': 'eom', } # Identity priority for naming IDENTITY_PRIORITY = [ 'couple_1', 'couple_2', # The married couple 'wedding_party', # Bridesmaids, groomspeople 'parents', # Parents of the couple 'grandparents', 'siblings', 'extended_family', 'friends', 'vendors', # Photographer, DJ, etc. ] ``` ### Identity Linking Workflow 1. **Couple identification**: User tags couple in 2-3 photos 2. **Wedding party**: User identifies key people 3. **Auto-propagation**: Embeddings match across all photos 4. **Guest matching**: Optional guest list import for name assignment 5. **Manual corrections**: UI for fixing mismatches ## Aesthetic Scoring ### Per-Photo Quality Metrics ```python AESTHETIC_FEATURES = { # Technical quality 'sharpness': 'Laplacian variance, MTF analysis', 'exposure': 'Histogram analysis, dynamic range', 'noise': 'High-ISO detection, grain analysis', # Composition 'rule_of_thirds': 'Subject placement scoring', 'symmetry': 'For venue/group shots', 'framing': 'Negative space, balance', # Face-specific 'expression': 'Smile detection, eye openness', 'blink_detection': 'Eyes closed penalty', 'gaze_direction': 'Looking at camera vs. candid', 'face_occlusion': 'Nothing blocking the face', 'face_lighting': 'Even illumination, no harsh shadows', # Emotional 'genuine_smile': 'Duchenne marker detection', 'moment_quality': 'Laughter, tears, embraces', } ``` ### Best Photo Selection Per Person ```python def select_best_photos(cluster_photos, n=5): """Select top N photos for a person across all their appearances.""" scores = [] for photo in cluster_photos: score = ( 0.25 * technical_quality(photo) + 0.25 * composition_score(photo) + 0.30 * expression_quality(photo) + 0.20 * context_diversity(photo, scores) # Avoid all similar shots ) scores.append((photo, score)) # Select top N with diversity constraint return diverse_top_n(scores, n, diversity_threshold=0.7) ``` ## Theatre Mode ### Moment Detection & Playback ``` KEY MOMENTS (auto-detected + user-tagged): ├── Ceremony │ ├── Processional │ ├── Vows exchange │ ├── Ring ceremony │ ├── First kiss │ └── Recessional ├── Reception │ ├── Grand entrance │ ├── First dance │ ├── Parent dances │ ├── Toasts/speeches │ ├── Cake cutting │ └── Bouquet/garter ├── Party │ ├── Dance floor highlights │ └── Exit/sendoff └── Candids ├── Emotional moments (tears, laughter) └── Spontaneous joy ``` ### In-Scene Video Projection ``` Theatre Mode Rendering: 1. User navigates 3DGS scene freely 2. Approaches "moment marker" (glowing orb/frame) 3. Video/slideshow plays IN the 3D space ├── On walls where projector was ├── Floating frames in dance floor area └── Photo booth backdrop location 4. Spatial audio for speeches/music 5. User can pause, scrub, exit to continue exploring ``` ## Web Viewer Architecture ```javascript // Wedding Immortalist Viewer Components const VIEWER_FEATURES = { // 3DGS Navigation gaussianSplatting: { renderer: 'three-gaussian-splat', navigation: 'orbit + first-person', qualityLevels: ['preview', 'standard', 'maximum'], }, // Theatre Mode theatreMode: { momentMarkers: true, videoInScene: true, spatialAudio: true, transitionEffects: 'theme-matched', }, // Guest Roster guestRoster: { faceGrid: 'clustered by identity', photoGallery: 'per-person best shots', searchByName: true, shareableLinks: 'per-guest galleries', }, // Theme theming: { colorPalette: 'extracted from wedding', typography: 'theme-matched', uiElements: 'aesthetic-consistent', }, }; ``` ## Anti-Patterns ### "All Frames, All the Time" **Wrong**: Extracting every video frame for 3DGS. **Why**: Redundant data, 10x slower processing, no quality improvement. **Right**: 2-3 fps extraction with motion-based keyframe selection. ### "One Giant Scene" **Wrong**: Training single 3DGS for entire venue. **Why**: Memory explosion, quality degradation, impossible on consumer hardware. **Right**: Train per-space, create unified navigation with seamless transitions. ### "Default Clustering Threshold" **Wrong**: Using default HDBSCAN settings. **Why**: Wedding photos have varying lighting, makeup, angles—need tuning. **Right**: Tune per-wedding based on photo count and quality variance. ### "Ignoring Theme" **Wrong**: Generic white/gray viewer UI for disco wedding. **Why**: Destroys the personality and joy of the event. **Right**: Extract and honor the couple's aesthetic choices. ### "Photographer Only" **Wrong**: Using only professional photos. **Why**: Misses candid moments, guest perspectives, coverage gaps. **Right**: Merge professional + guest photos for complete coverage. ## Guest Experience Features ### Shareable Guest Galleries ``` Per-Guest Experience: ├── Personalized link: yourwedding.com/guests/aunt-martha ├── Their best photos (AI-curated) ├── Photos with the couple ├── Group photos they appear in ├── Download options (full-res) └── "Add to my memories" for their own archives ``` ### Collaborative Enhancement ``` Guest Contribution Portal: ├── Upload their own photos ├── Tag themselves in unidentified clusters ├── Correct misidentifications ├── Add names to unknown guests └── Submit video moments they captured ``` ## Output Deliverables ``` wedding-immortalist-output/ ├── 3dgs-scenes/ │ ├── ceremony/ │ ├── cocktail/ │ ├── reception/ │ └── unified-navigation.json ├── guest-roster/ │ ├── face-clusters/ │ ├── identity-mapping.json │ └── per-person-galleries/ ├── theatre-mode/ │ ├── moment-markers.json │ ├── video-segments/ │ └── spatial-audio/ ├── web-viewer/ │ ├── index.html │ ├── theme-config.json │ └── assets/ └── exports/ ├── full-resolution-photos/ ├── guest-gallery-zips/ └── video-compilations/ ``` ## Integration Points - **drone-inspection-specialist**: 3DGS techniques, COLMAP pipeline - **collage-layout-expert**: Photo arrangement, aesthetic composition - **color-theory-palette-harmony-expert**: Theme color extraction - **clip-aware-embeddings**: Photo-text matching for search - **photo-composition-critic**: Aesthetic quality scoring --- **Core Philosophy**: A wedding happens once. The memories should live forever. This skill transforms ephemeral moments into an eternal, explorable experience that honors the couple's unique celebration—whether it's a disco dance party, a rustic barn gathering, or two grooms celebrating their love with chosen family.