关于 wedding-immortalist
面向将婚礼照片和视频制作成可探索 3D 体验的技能,供婚礼纪念项目的构建者参考。内容包括 3D Gaussian Splatting 重建、人脸聚类、主题适配设计及场景内关键时刻播放。
主要功能
- 01照片与视频 3DGS 重建
- 02人脸检测与身份聚类
- 03按主题适配视觉设计
- 04按人物筛选优选照片
- 05场景内关键时刻播放
- 06宾客图库与协作修正
适用场景
- 01将婚礼影像整理为可探索场景
- 02为宾客生成个性化照片图库
- 03在 3D 场景中重温仪式和宴会片段
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill wedding-immortalist安装后在 Claude Code 中输入/wedding-immortalist确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.claude-plugin/plugin.jsonreferences/face-clustering-aesthetics.mdgaussian-splatting-pipeline.mdtheme-extraction.md详细介绍
婚礼修仙者
将婚礼照片和视频转化为永恒、沉浸式的 3D 体验。打造鲜活的回忆,让新人和宾客永远重温婚礼的魔力。
何时使用此技能
适用于:
- 将数千张婚礼照片处理成 3DGS 场景
- 创建剧院模式体验,让仪式或宴会中的片段在原地播放
- 构建按人脸聚类的宾客名册,并为每位宾客挑选最佳照片
- 让设计美学契合婚礼主题(迪斯科、乡村、海滩、现代、酷儿庆典)
- 使用美学评分为每位宾客精选照片
不适用于:
- 通用照片编辑 → 使用 native-app-designer
- 非婚礼类 3DGS → 使用 drone-inspection-specialist
- 活动策划 → 这不是婚礼策划工具
- 不进行 3D 重建的视频编辑
核心流程
┌─────────────────────────────────────────────────────────────────┐
│ 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 │
│ │
└─────────────────────────────────────────────────────────────────┘
主题自适应设计
主题检测与匹配
每场婚礼都有独特的美学风格。提取并遵循这一风格:
| 主题类型 | 配色方案 | 字体排印 | UI 元素 |
|---|---|---|---|
| 70 年代迪斯科 | 金色、橙色、赭红色、深紫色 | 复古风格手写体、粗体无衬线字体 | 镜面球、星芒、暖色渐变 |
| 乡村/谷仓 | 大地色、鼠尾草绿、奶油色、木色 | 衬线字体、手写字体 | 粗麻布纹理、野花点缀 |
| 海滩/海岸 | 海洋蓝、沙色、珊瑚色、海沫绿 | 轻盈的无衬线字体、手写体 | 贝壳图案、波浪纹 |
| 现代极简 | 黑色、白色、金属色 | 简洁的几何无衬线字体 | 利落线条、留白 |
| 酷儿之喜 | 彩虹色谱、鲜艳色彩 | 富有表现力、多样化 | 骄傲元素、极致欢庆风格 |
| 文化融合 | 按传统而定 | 传统与现代相结合 | 文化图案、传统纹样 |
从照片中提取主题
# 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 流程
照片/视频导入
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 运动恢复结构
# 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 训练
# 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 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_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.
]
身份关联工作流
- 识别新人:用户在 2-3 张照片中标记新人
- 婚礼团队:用户识别重要人物
- 自动传播:通过嵌入向量在所有照片中匹配
- 匹配宾客:可选导入宾客名单并分配姓名
- 手动修正:通过 UI 修正不匹配项
美学评分
单张照片的质量指标
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',
}
为每个人挑选最佳照片
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)
剧院模式
片段检测与播放
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
场景内视频投影
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 查看器架构
// 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',
},
};
反模式
“始终提取所有帧”
错误做法:提取视频的每一帧用于 3DGS。 原因:数据冗余、处理速度慢 10 倍,且不会提升质量。 正确做法:以 2-3 fps 提取,并根据运动选择关键帧。
“一个巨型场景”
错误做法:为整个场地训练单个 3DGS。 原因:内存占用激增、质量下降,而且消费级硬件无法运行。 正确做法:按空间分别训练,并通过无缝过渡创建统一导航。
“使用默认聚类阈值”
错误做法:使用默认的 HDBSCAN 设置。 原因:婚礼照片的光线、妆容和角度各不相同,需要进行调优。 正确做法:根据每场婚礼的照片数量和质量差异进行调优。
“忽略主题”
错误做法:为迪斯科主题婚礼使用通用的白/灰色查看器 UI。 原因:会破坏活动的个性与欢乐氛围。 正确做法:提取并遵循新人的美学选择。
“只用摄影师拍摄的照片”
错误做法:只使用专业照片。 原因:会错过抓拍瞬间、宾客视角和覆盖盲区。 正确做法:合并专业照片和宾客照片,实现完整覆盖。
宾客体验功能
可分享的宾客相册
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
协作增强
Guest Contribution Portal:
├── Upload their own photos
├── Tag themselves in unidentified clusters
├── Correct misidentifications
├── Add names to unknown guests
└── Submit video moments they captured
交付成果
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/
集成点
- drone-inspection-specialist:3DGS 技术、COLMAP 流程
- collage-layout-expert:照片排布、美学构图
- color-theory-palette-harmony-expert:主题色提取
- clip-aware-embeddings:用于搜索的图文匹配
- photo-composition-critic:美学质量评分
核心理念:婚礼一生只有一次,回忆却应永存。这项技能将转瞬即逝的时刻转化为永恒且可探索的体验,礼赞新人独特的庆典——无论是迪斯科舞会、质朴的谷仓聚会,还是两位新郎与挚爱的家人朋友共同庆祝爱情。
评论
支持 Markdown