defaults:
  - _self_

name: networks.zipsplat_pi3
compile_loss: false
weights: weights/pi3.pt

# Backbone: Pi3 (non-x), DINOv2 ViT-L/14 + 36-layer alternating frame/global decoder
embed_dim: 1024
patch_size: 14
layer_ids: [4, 11, 17]   # shallow→deep, 18 frame/global pairs (large decoder)
backbone:
  decoder_size: large
  rope_freq: 100.0
  num_register_tokens: 5
  trainable_encoder: true
  use_checkpoint: false

# General
img_size: 518   # Pi3 native resolution (matches pretrained weights)
gaussians_per_prototype: 32

# Layer role assignment (0=deepest=L17, 1=middle=L11, 2=shallowest=L4)
# clustering_layer=0: middle-layer post-prepare collapses to rank 1 — cluster on deepest instead.
clustering_layer: 0
scene_init_layer: 0

# Attention (num_heads = embed_dim / 64 for head_dim=64)
num_heads: ${eval:'${.embed_dim} // 64'}
mlp_ratio: 4.0
fuse_layer_scale: 0.01

# Query clustering
query_sample_ratio: [0.5, 1.0]
query_ratio_schedule: 0.5
query_scale_with_views: 0.5
knn:
  init_mode: uniform
  chunk_size: 2048
  n_iters: 5

# Color skip (ca_concat-style, always on when with_color_skip=true)
with_color_skip: true
color_skip_dim: 128

# Runtime
return_attention: true
use_checkpoint: false

# Gaussian head
gaussian_head:
  sh_degree: 1
  max_scale: 0.1
  random_background: false
  coupled_init: true
  use_l1_loss: true
  use_chamfer: true
  loss_on_context: false
  mse_weight: 1.0
  lpips_weight: 0.05
  chamfer_weight: 0.1
  depth_weight: 0.01
