# Skyrim Nif

> Read and manipulate NIF 3D mesh files. Use when the user wants to inspect meshes, find texture paths, scale models, or troubleshoot invisible items.

- Skill: `majiayu000/skyrim-nif` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/skyrim-nif`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/skyrim-nif/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/skyrim-nif

---


# Skyrim NIF Module

Read and manipulate NIF (NetImmerse Format) 3D mesh files using Spooky's AutoMod Toolkit.

## Prerequisites

Run all commands from the toolkit directory:
```bash
cd "<TOOLKIT_PATH>"
# Example: cd "C:\Tools\spookys-automod-toolkit"
```

## Overview

NIF files are the 3D model format used by Skyrim for meshes (weapons, armor, architecture, etc.). This module provides read capabilities and basic transformations.

**Note:** This module cannot create new meshes from scratch. For that, use Blender with the NifTools addon.

## Command Reference

### Get NIF Info
```bash
dotnet run --project src/SpookysAutomod.Cli -- nif info "<nif>"
```
Output includes: Filename, file size, header string, NIF version.

### List Textures
```bash
dotnet run --project src/SpookysAutomod.Cli -- nif textures "<nif>"
```
Lists all texture paths referenced in the mesh.

### Scale Mesh
```bash
dotnet run --project src/SpookysAutomod.Cli -- nif scale "<nif>" <factor> [options]
```
| Option | Default | Description |
|--------|---------|-------------|
| `<factor>` | Required | Scale factor (1.5 = 150%, 0.5 = 50%) |
| `--output`, `-o` | input file | Output file path |

### Copy NIF
```bash
dotnet run --project src/SpookysAutomod.Cli -- nif copy "<nif>" --output "<file>"
```
Copies and validates the NIF file.

## Common Workflows

### Inspect Mesh for Troubleshooting
```bash
# Get basic info about a mesh
dotnet run --project src/SpookysAutomod.Cli -- nif info "./Meshes/Weapons/Iron/IronSword.nif"

# Find what textures it uses
dotnet run --project src/SpookysAutomod.Cli -- nif textures "./Meshes/Weapons/Iron/IronSword.nif"
```

Example texture output:
```
Textures (3):
  textures\weapons\iron\ironsword.dds
  textures\weapons\iron\ironsword_n.dds
  textures\weapons\iron\ironsword_s.dds
```

### Scale Weapon/Armor
```bash
# Make weapon 50% larger
dotnet run --project src/SpookysAutomod.Cli -- nif scale "./Meshes/weapon.nif" 1.5 --output "./Meshes/weapon_large.nif"

# Make weapon 50% smaller
dotnet run --project src/SpookysAutomod.Cli -- nif scale "./Meshes/weapon.nif" 0.5 --output "./Meshes/weapon_small.nif"

# Double the size
dotnet run --project src/SpookysAutomod.Cli -- nif scale "./Meshes/weapon.nif" 2.0 --output "./Meshes/weapon_huge.nif"
```

### Find Missing Textures
```bash
# 1. Extract BSA to get meshes
dotnet run --project src/SpookysAutomod.Cli -- archive extract "SomeMod.bsa" --output "./Extracted"

# 2. Check what textures a mesh needs
dotnet run --project src/SpookysAutomod.Cli -- nif textures "./Extracted/meshes/myarmor.nif"

# 3. Verify those textures exist in the extracted files
# If missing, that explains purple/missing textures in-game
```

### Troubleshoot Invisible Items
```bash
# 1. Check if mesh file exists and is valid
dotnet run --project src/SpookysAutomod.Cli -- nif info "./Meshes/MyWeapon.nif"

# 2. If info fails, mesh is corrupted or wrong format

# 3. If info succeeds, check texture paths
dotnet run --project src/SpookysAutomod.Cli -- nif textures "./Meshes/MyWeapon.nif"

# 4. Common causes of invisible items:
#    - Mesh file not found (wrong path in ESP)
#    - Mesh is wrong format (LE vs SE)
#    - Textures missing
```

## NIF Format Information

### Skyrim NIF Versions
| Game | NIF Version | Notes |
|------|-------------|-------|
| Skyrim LE | 20.2.0.7 | Older format |
| Skyrim SE/AE | 20.2.0.7 | BSTriShape optimized |
| Fallout 4 | 20.2.0.7 | Different shaders |

### Common Node Types
| Node | Purpose |
|------|---------|
| BSFadeNode | Root node for meshes |
| NiTriShape | Triangle geometry (LE) |
| BSTriShape | Optimized geometry (SE) |
| BSLightingShaderProperty | Material/shader info |
| NiSkinInstance | Skinning for animated meshes |

### Texture Slots
| Slot | Suffix | Purpose |
|------|--------|---------|
| Diffuse | none / _d | Base color |
| Normal | _n | Normal map (bumpiness) |
| Specular | _s | Specular/gloss |
| Glow | _g | Emissive/glow |
| Cube Map | _e | Environment reflections |

## Vanilla Mesh Paths

Useful vanilla mesh paths for `--model` option in ESP module:

### Weapons
```
Weapons\Iron\IronSword.nif
Weapons\Iron\IronDagger.nif
Weapons\Iron\IronWarAxe.nif
Weapons\Iron\IronMace.nif
Weapons\Iron\IronBattleaxe.nif
Weapons\Iron\IronGreatsword.nif
Weapons\Iron\IronWarhammer.nif
Weapons\Bow\HuntingBow.nif
Weapons\Staff\Staff.nif
```

### Armor
```
Armor\Iron\Male\IronCuirass_1.nif
Armor\Iron\Male\IronHelmet.nif
Armor\Iron\Male\IronGauntlets.nif
Armor\Iron\Male\IronBoots.nif
Armor\Iron\IronShield.nif
```

## Limitations

This module **CAN**:
- Read NIF file information
- List referenced textures
- Scale meshes uniformly
- Copy/validate NIF files

This module **CANNOT**:
- Create new meshes from scratch
- Edit mesh geometry (vertices, faces)
- Retexture meshes (change texture paths)
- Create or edit rigging/skinning
- Convert between NIF versions (LE to SE)

For advanced mesh editing, use:
- **Blender** + **NifTools** addon - Full mesh creation/editing
- **NifSkope** - Direct NIF editing
- **Cathedral Assets Optimizer** - LE to SE conversion

## Important Notes

1. **LE vs SE meshes** - SE uses optimized BSTriShape, not compatible with LE
2. **Texture paths are relative** - Start from Data folder (e.g., `textures\weapons\...`)
3. **Case sensitivity** - Windows ignores case, but be consistent
4. **Scale affects all nodes** - Uniform scaling only
5. **Use `--json` flag** for machine-readable output when scripting

## JSON Output

All commands support `--json` for structured output:
```bash
dotnet run --project src/SpookysAutomod.Cli -- nif info "./Meshes/weapon.nif" --json
```

Example responses:
```json
{
  "success": true,
  "result": {
    "fileName": "weapon.nif",
    "fileSize": 45678,
    "version": "20.2.0.7",
    "headerString": "Gamebryo File Format, Version 20.2.0.7"
  }
}
```

Textures response:
```json
{
  "success": true,
  "result": {
    "textures": [
      "textures\\weapons\\iron\\ironsword.dds",
      "textures\\weapons\\iron\\ironsword_n.dds"
    ]
  }
}
```

