Claude Code Plugins

Community-maintained marketplace

Feedback
0
0

Validate and manage D&D party configuration files including player names, character mappings, and DM information. Use when creating new party configs, troubleshooting speaker mapping issues, or verifying configuration before session processing.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name party-validator
description Validate and manage D&D party configuration files including player names, character mappings, and DM information. Use when creating new party configs, troubleshooting speaker mapping issues, or verifying configuration before session processing.

Party Validator Skill

Validate, create, and manage D&D party configuration files for accurate speaker mapping.

What This Skill Does

This skill helps manage party configurations to ensure accurate speaker-to-character mapping during session processing:

  1. Validate Configurations: Check party config files for correct structure and data
  2. Create New Configs: Generate party configuration files from templates
  3. Update Configs: Modify existing configurations with new players or characters
  4. Compare Configs: Diff multiple party configurations
  5. Speaker Mapping: Preview how speakers will be mapped to characters
  6. Troubleshoot Issues: Diagnose and fix common configuration problems

Why Party Configs Matter

Party configurations enable:

  • Accurate Speaker Mapping: Map SPEAKER_00, SPEAKER_01, etc. to actual players
  • Character Attribution: Link dialogue to D&D characters for IC content
  • Knowledge Extraction: Properly attribute actions and dialogue to characters
  • Consistent Naming: Maintain consistent player/character names across sessions

Configuration File Structure

Location

Party configs are stored in: data/party_<name>.json

Schema

{
  "party_name": "Main Campaign Party",
  "campaign": "Dragon Heist",
  "dm": {
    "name": "Alice",
    "voice_characteristics": "Female, low pitch, authoritative"
  },
  "players": [
    {
      "name": "Bob",
      "voice_characteristics": "Male, mid pitch, energetic",
      "characters": [
        {
          "name": "Thorin Ironfist",
          "class": "Fighter",
          "race": "Dwarf"
        }
      ]
    },
    {
      "name": "Charlie",
      "voice_characteristics": "Male, high pitch, dramatic",
      "characters": [
        {
          "name": "Elara Moonwhisper",
          "class": "Wizard",
          "race": "Elf"
        }
      ]
    }
  ]
}

Required Fields

Root Level:

  • party_name (string): Descriptive name for the party
  • dm (object): Dungeon Master information
  • players (array): List of player objects

DM Object:

  • name (string): DM's real name

Player Object:

  • name (string): Player's real name
  • characters (array): List of character objects (can be empty for new players)

Character Object:

  • name (string): Character's name in the game
  • class (string): D&D class (optional but recommended)
  • race (string): D&D race (optional but recommended)

Optional Fields

  • campaign (string): Campaign name or setting
  • voice_characteristics (string): Voice description to aid speaker mapping
  • session_range (array): e.g., [1, 50] - sessions this config applies to
  • notes (string): Additional information about the party
  • created_date (string): When configuration was created
  • last_updated (string): Last modification date

Usage

Validate Existing Config

User: "Validate the default party configuration" User: "Check if party_main.json is correct" User: "Is the party config valid?"

Validate All Configs

User: "Validate all party configurations" User: "Check all party config files"

Create New Config

User: "Create a new party config called 'oneshot' with 3 players" User: "Set up a party configuration for my new campaign"

Update Existing Config

User: "Add a new player named David to the main party config" User: "Update Bob's character to level 5 Paladin"

Troubleshoot Issues

User: "Why is speaker mapping wrong for session 12?" User: "The DM is being identified as a player. Help me fix the config."

Command Reference

# Validate specific config
python cli.py validate-config --party default

# Validate all configs
python cli.py validate-config --all

# Create new config
python cli.py create-party-config --name oneshot --players Alice Bob Charlie

# Update config
python cli.py update-party-config --name default --add-player David

# Show config
python cli.py show-party-config --name default

# List all configs
python cli.py list-party-configs

MCP Tool Integration

Use mcp__videochunking-dev__validate_party_config to validate configurations.

Validate Specific Config

# Via MCP tool
validate_party_config(config_name="default")

Returns:

{
  "file": "party_default.json",
  "valid": true,
  "player_count": 4,
  "character_count": 4,
  "errors": [],
  "warnings": []
}

Validate All Configs

# Via MCP tool
validate_party_config()  # No config_name = validate all

Returns:

{
  "configs": [
    {
      "file": "party_default.json",
      "valid": true,
      "player_count": 4,
      "character_count": 4,
      "errors": [],
      "warnings": []
    },
    {
      "file": "party_oneshot.json",
      "valid": false,
      "errors": ["Missing 'dm' field"],
      "warnings": ["Player 0 has no characters"]
    }
  ],
  "total_validated": 2
}

Validation Rules

Critical Errors (Must Fix)

  • ❌ Missing party_name field
  • ❌ Missing dm object
  • ❌ Missing players array
  • ❌ Invalid JSON syntax
  • ❌ DM missing name field
  • ❌ Player missing name field
  • ❌ Characters array is not a list
  • ❌ Duplicate player names
  • ❌ Character missing name field

Warnings (Should Review)

  • ⚠️ Player has no characters (might be observer or new)
  • ⚠️ Character missing class or race (less detailed extraction)
  • ⚠️ No voice_characteristics (harder to map speakers)
  • ⚠️ Very few players (<2) or many players (>8)
  • ⚠️ No campaign specified
  • ⚠️ Empty or very short character names

Recommendations

  • ℹ️ Add voice_characteristics for better speaker mapping
  • ℹ️ Include character class and race for richer knowledge extraction
  • ℹ️ Specify campaign name for organization
  • ℹ️ Add notes about campaign setting or party dynamics

Common Issues and Solutions

Issue: Missing Required Field

Error: Missing 'dm' field in party_custom.json

Solution:
Add DM information:
{
  "dm": {
    "name": "Your DM Name"
  }
}

Issue: Invalid JSON Syntax

Error: Invalid JSON in party_default.json - Unexpected token at line 15

Solution:
- Check for missing commas between fields
- Ensure all quotes are matched
- Verify no trailing commas
- Use JSON validator: jsonlint.com

Issue: Duplicate Player Names

Error: Duplicate player name 'Bob' found in party_main.json

Solution:
- Use unique player names
- If same person plays different characters across sessions,
  use disambiguating names: "Bob_Character1", "Bob_Character2"
- Or create separate configs per session range

Issue: Player Has No Characters

Warning: Player 'Charlie' has no characters defined

Solutions:
1. Add character to players array:
   "characters": [{"name": "CharName", "class": "Rogue", "race": "Human"}]
2. If player is observer/DM assistant, this is okay (can ignore warning)
3. If new campaign, add character after character creation session

Issue: Wrong Speaker Mapping

Problem: SPEAKER_00 is mapped to wrong player in output

Solutions:
1. Check if voice_characteristics are accurate and distinct
2. Verify player order matches typical speaking order
3. Review diarization settings (may need adjustment)
4. Consider manual speaker label correction post-processing
5. Ensure no players are missing from config

Issue: Character Name Mismatched

Problem: Character name in transcript doesn't match config

Solutions:
1. Update config with actual name used in game
2. Add name variations/aliases to character object
3. Use consistent character names during play
4. Manually correct extracted knowledge if needed

Creating New Party Configs

Template-Based Creation

Use provided template:

cp data/party_template.json data/party_newcampaign.json
# Edit party_newcampaign.json with actual information
python cli.py validate-config --party newcampaign

Interactive Creation

Follow prompts:

python cli.py create-party-config --interactive

Party name: Summer Oneshot
Campaign name (optional): Lost Mine of Phandelver
DM name: Alice

How many players? 4

Player 1 name: Bob
Player 1 voice: Male, deep voice
Player 1 character name: Thorin
Player 1 character class: Fighter
Player 1 character race: Dwarf

... (repeat for all players)

Config saved to: data/party_summer_oneshot.json
Validation: ✅ VALID

Programmatic Creation

from src.party_config import PartyConfig

config = PartyConfig.create(
    party_name="Test Party",
    campaign="Test Campaign",
    dm_name="Alice",
    players=[
        {
            "name": "Bob",
            "voice": "Male, mid pitch",
            "characters": [
                {"name": "Thorin", "class": "Fighter", "race": "Dwarf"}
            ]
        },
        {
            "name": "Charlie",
            "characters": [
                {"name": "Elara", "class": "Wizard", "race": "Elf"}
            ]
        }
    ]
)

config.save("data/party_test.json")
config.validate()  # Returns errors and warnings

Speaker Mapping Preview

Before processing, preview how speakers will be mapped:

python cli.py preview-speaker-mapping --party default --session session_012

Expected Mapping (based on typical speaking order):
  SPEAKER_00 → Alice (DM)
  SPEAKER_01 → Bob (Thorin Ironfist)
  SPEAKER_02 → Charlie (Elara Moonwhisper)
  SPEAKER_03 → David (Grim Stonefist)
  SPEAKER_04 → Eve (Lyra Brightwood)

Notes:
  - Mapping is based on voice_characteristics and typical patterns
  - Actual mapping may vary based on who speaks first
  - Review output after processing for accuracy
  - Adjust voice_characteristics if mapping is incorrect

Configuration Management

Version Control

Commit party configs to git:

git add data/party_*.json
git commit -m "Add main campaign party config"
git push

Backup Configs

Before making changes:

cp data/party_default.json data/party_default.json.backup

Multiple Configs for Same Campaign

Use session ranges or naming:

party_main_sessions_1-10.json   # Original party
party_main_sessions_11-20.json  # New player joined
party_main_sessions_21-30.json  # Player left, character replaced

Or simply:

party_main_early.json
party_main_current.json

Specify during processing:

python cli.py process video.mp4 --party main_current

Advanced Validation

Schema Validation

Use JSON Schema for strict validation:

python cli.py validate-config --party default --strict

# Uses schema file: schemas/party_config_schema.json

Cross-Session Validation

Ensure config matches actual session data:

python cli.py validate-config --party default --check-session session_012

Validation Results:
  ✅ All speakers in session_012 mapped to config players
  ⚠️ SPEAKER_04 in session but only 4 players in config (expected 5 speakers)

Recommendation:
  Check if new player joined for session_012
  Update config or verify diarization didn't over-segment

Historical Validation

Check if configs match historical usage:

python cli.py validate-config --history

Party Config Usage:
  party_default.json:
    Used in: 25 sessions (session_001 to session_025)
    Speaker counts: 5 (consistent)
    Issues: None

  party_oneshot.json:
    Used in: 3 sessions (session_026, session_027, session_028)
    Speaker counts: 4, 4, 5 (inconsistent)
    Issues: Session_028 had extra speaker not in config

Recommendations:
  ⚠️ Review session_028 - possible new player or guest
  ℹ️ Consider creating party_oneshot_v2.json for future sessions

Integration with Other Skills

  • session-processor: Use validated configs for session processing
  • diagnostics-runner: Includes party config validation in health checks
  • campaign-analyzer: Use character names from configs for knowledge extraction
  • video-chunk: Validates party config before starting pipeline

Best Practices

  1. Create Config Before First Session: Set up party config before processing
  2. Include Voice Characteristics: Helps with speaker diarization accuracy
  3. Keep Configs Updated: Add new players/characters as they join
  4. Version Configs: Track changes in git for history
  5. Validate After Changes: Always validate after editing configs
  6. Use Descriptive Names: Name configs clearly (party_main, party_oneshot_winter)
  7. Document Special Cases: Add notes for temporary players or guests
  8. Backup Before Major Changes: Save backups before restructuring
  9. Test with Sample Session: Process one session to verify mapping
  10. Review First Output: Manually check speaker mapping is correct

Example Workflows

New Campaign Setup

User: "I'm starting a new campaign. Help me set up the party config."

Assistant uses party-validator:
1. Asks for party details (DM, players, characters)
2. Creates new config file: data/party_newcampaign.json
3. Validates structure
4. Previews speaker mapping
5. Confirms ready for session processing

Troubleshooting Bad Mapping

User: "Session 12 has wrong speaker assignments. The DM is labeled as a player."

Assistant uses party-validator:
1. Validates party config: check config is correct
2. Reviews session 12 output: check actual speaker assignments
3. Compares expected vs actual mapping
4. Identifies issue: Speaker order different than expected
5. Suggests: Update voice_characteristics or manually correct session

Config Migration

User: "We had a player change characters. Update the config."

Assistant uses party-validator:
1. Reads current config
2. Updates player's character information
3. Validates updated config
4. Creates backup of old config
5. Recommends: Specify session range for old vs new character

Future Enhancements

Potential features:

  • Automatic speaker-to-player mapping based on voice analysis
  • Config templates for common party sizes
  • Visual config editor (web UI)
  • Character progression tracking (levels, abilities)
  • Session attendance tracking
  • Voice sample collection for better diarization
  • Integration with D&D Beyond for character import
  • Multi-language support for international campaigns