skills/skillxiv-v0.0.2-claude-opus-4.6/ffacenerf-few-shot-face-editing/SKILL.md
Edit 3D faces with flexible mask layouts using only a few training samples. FFaceNeRF employs geometry adapters with feature injection and latent mixing for tri-plane augmentation, enabling rapid NeRF adaptation without fixed segmentation masks. Ideal for personalized medical imaging, creative face editing, and applications requiring user-defined mask control.
npx skillsauth add ADu2021/skillXiv ffacenerf-few-shot-face-editingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
FFaceNeRF tackles a fundamental limitation in NeRF-based 3D face editing: existing methods rely on fixed segmentation masks predefined during training, severely restricting user control. Changing mask layouts requires retraining with large datasets—impractical for personalized applications like medical imaging or creative editing. FFaceNeRF introduces a flexible NeRF editing framework that adapts to arbitrary mask layouts using only a handful of training images. The key innovation combines two complementary techniques: geometry adapters with feature injection (for precise geometric control) and latent mixing for tri-plane augmentation (enabling training with few samples). This empowers applications where custom masks and rapid adaptation are critical.
The system integrates four essential components:
Set up base NeRF model and attach geometry adapter for targeted manipulation:
import torch
import torch.nn as nn
from typing import Tuple
class GeometryAdapter(nn.Module):
"""
Learnable adapter for geometry modification in NeRF.
Uses feature injection to modulate density and position shifts.
"""
def __init__(self, hidden_dim: int = 64, input_dim: int = 3):
super().__init__()
self.input_dim = input_dim
self.hidden_dim = hidden_dim
# Feature injection layers
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.fc2 = nn.Linear(hidden_dim, hidden_dim)
self.fc3 = nn.Linear(hidden_dim, input_dim) # Output: position offset
# Density modulation head
self.density_head = nn.Linear(hidden_dim, 1)
def forward(self, positions: torch.Tensor, features: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:
"""
Modulate geometry via position offsets and density changes.
Takes 3D positions and extracted features as input.
"""
x = torch.cat([positions, features], dim=-1) if features is not None else positions
h = torch.relu(self.fc1(x))
h = torch.relu(self.fc2(h))
# Position offset for shape manipulation
position_offset = torch.tanh(self.fc3(h)) * 0.1 # Bounded offset
# Density modulation for appearance changes
density_modulation = self.density_head(h)
return position_offset, density_modulation
Augment training data in latent space by mixing features from few samples:
def latent_mixing_augmentation(tri_plane_features: torch.Tensor,
num_augmentations: int = 5) -> torch.Tensor:
"""
Synthesize diverse tri-plane features via latent space mixing.
Enables training effective models from very few input images.
"""
batch_size, planes, height, width = tri_plane_features.shape # (B, 3, H, W)
augmented_features = [tri_plane_features]
# Interpolate between pairs of tri-plane representations
for _ in range(num_augmentations):
# Randomly select two samples and blend coefficient
idx1 = torch.randint(0, batch_size, (1,)).item()
idx2 = torch.randint(0, batch_size, (1,)).item()
alpha = torch.rand(1).item()
# Linear interpolation in latent space
mixed = alpha * tri_plane_features[idx1] + (1 - alpha) * tri_plane_features[idx2]
augmented_features.append(mixed.unsqueeze(0))
# Concatenate original and augmented features
augmented_batch = torch.cat(augmented_features, dim=0) # (B + num_aug, 3, H, W)
return augmented_batch
Apply selective geometry modifications only to user-defined masked regions:
def apply_mask_guided_editing(ray_positions: torch.Tensor,
mask: torch.Tensor,
geometry_adapter: GeometryAdapter,
features: torch.Tensor) -> torch.Tensor:
"""
Edit geometry selectively within masked regions.
Preserves unmasked areas while applying targeted shape changes.
"""
# Get geometry modifications from adapter
position_offsets, density_mods = geometry_adapter(ray_positions, features)
# Apply mask to offsets (only modify masked regions)
masked_offsets = position_offsets * mask.unsqueeze(-1)
modified_positions = ray_positions + masked_offsets
return modified_positions
Train NeRF with geometry adapter and augmentation using minimal samples:
import torch.optim as optim
from torch.utils.data import DataLoader
def train_ffacenerf(nerf_model,
geometry_adapter: GeometryAdapter,
train_images: torch.Tensor,
train_masks: torch.Tensor,
target_geometry: torch.Tensor,
num_epochs: int = 50,
learning_rate: float = 1e-3):
"""
Few-shot fine-tune NeRF with geometry adapter and latent mixing.
Rapidly adapts to new mask layouts and editing targets.
"""
optimizer = optim.Adam([
{'params': geometry_adapter.parameters(), 'lr': learning_rate},
{'params': nerf_model.parameters(), 'lr': learning_rate * 0.1} # Lower LR for base model
])
# Augment training data using latent mixing
tri_plane_features = nerf_model.encode_tri_plane(train_images)
augmented_features = latent_mixing_augmentation(tri_plane_features, num_augmentations=8)
for epoch in range(num_epochs):
total_loss = 0.0
# Process augmented batch
for aug_idx in range(augmented_features.shape[0]):
features = augmented_features[aug_idx:aug_idx+1]
# Forward pass: render image from modified NeRF
ray_positions = nerf_model.sample_rays()
modified_positions = apply_mask_guided_editing(ray_positions, train_masks,
geometry_adapter, features)
# Render with modified geometry
rendered_image = nerf_model.render(modified_positions, features)
# Reconstruction loss (match target geometry/appearance)
recon_loss = torch.nn.functional.mse_loss(rendered_image, train_images)
# Regularization: encourage smooth geometry offsets
position_offsets, _ = geometry_adapter(ray_positions, features)
smooth_loss = torch.mean(torch.abs(torch.diff(position_offsets, dim=0)))
# Combined loss
loss = recon_loss + 0.1 * smooth_loss
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item()
if (epoch + 1) % 10 == 0:
print(f"Epoch {epoch + 1}: Loss = {total_loss / augmented_features.shape[0]:.4f}")
return nerf_model, geometry_adapter
Apply trained model to new mask layouts without retraining:
def inference_with_custom_mask(nerf_model,
geometry_adapter: GeometryAdapter,
input_image: torch.Tensor,
new_mask: torch.Tensor,
editing_strength: float = 1.0) -> torch.Tensor:
"""
Generate edited face image with custom mask layout.
Enables flexible user control without requiring full retraining.
"""
with torch.no_grad():
# Encode input image to tri-plane features
tri_plane_features = nerf_model.encode_tri_plane(input_image)
# Sample rays for rendering
ray_positions = nerf_model.sample_rays()
# Apply mask-guided geometry editing with custom mask
modified_positions = apply_mask_guided_editing(
ray_positions,
new_mask * editing_strength,
geometry_adapter,
tri_plane_features
)
# Render final edited image
edited_image = nerf_model.render(modified_positions, tri_plane_features)
return edited_image
testing
Uses flow maps as look-ahead operators to enable principled reward-guided diffusion by predicting trajectory endpoints at any denoising step. Deploy when applying rewards or preferences to diffusion trajectories with meaningful gradients throughout generation.
testing
Train language models where each expert learns independently on closed datasets, enabling flexible inference with selective data inclusion or exclusion. 41% performance improvement while allowing users to opt out of specific data sources without retraining.
data-ai
Understand how token generation flexibility in diffusion LMs paradoxically constrains reasoning, as models exploit ordering flexibility to avoid uncertain tokens, and apply simplified approaches that preserve parallel decoding benefits. Use when optimizing diffusion-based language models for reasoning tasks.
devops
Enable LLM agents to improve continuously during deployment by constructing structured experience libraries through self-reflection on successes and failures—achieving 23% improvement on reasoning without gradient-based parameter updates or external training.