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シーンに処理する
- 挙式や披露宴の瞬間をその場で再生する、シアターモード体験を作る
- 顔でクラスタリングしたゲスト一覧を作成し、ベストショットを選ぶ
- 結婚式のテーマ(ディスコ、ラスティック、ビーチ、モダン、クィアのお祝い)に合わせてデザインの美学を調整する
- 美的スコアリングに基づき、ゲストごとにAIが写真を選定する
次の用途には使いません:
- 一般的な写真編集 → 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によるStructure from Motion
# 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.
]
ID連携のワークフロー
- カップルの識別:ユーザーが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倍遅くなるうえ、品質も向上しません。 適切な方法:動きに基づいてキーフレームを選び、1秒あたり2~3フレームを抽出します。
「巨大なシーンを1つ作る」
誤り:会場全体を単一の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:美的品質のスコアリング
基本理念:結婚式は一度きりです。思い出はいつまでも残るべきです。このスキルは、はかない瞬間を、ふたりならではのお祝いを大切にする、永遠に探索できる体験へと変えます。それがディスコダンスパーティーでも、素朴な納屋での集まりでも、選んだ家族と愛を祝う新郎ふたりの結婚式でも変わりません。