Skip to content
Automation
Skill

/sheet-splitter

Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files. Triggers: 'split drawings', 'break up the drawing set', 'separate sheets'. Run after /project-setup.

From plugin
claude-code-construction
3913 skills
Install
$ npx -y skills add dleerdefi/claude-code-construction --skill sheet-splitter --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/sheet-splitter

Context preview

The summary Claude sees to decide when to auto-load this skill.

Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet numbers from title blocks via vision, renames files. Triggers: 'split drawings', 'break up the drawing set', 'separate sheets'. Run after /project-setup.

SKILL.md

sheet-splitter.SKILL.md
name: sheet-splitter
description: >
  Split a bound drawing set PDF into individual sheet PDFs. Extracts sheet
  numbers from title blocks via vision, renames files. Triggers: 'split
  drawings', 'break up the drawing set', 'separate sheets'. Run after
  /project-setup.
argument-hint: "<drawing_set.pdf> [--output-dir <path>]"
disable-model-invocation: true

Sheet Splitter

Splits a bound drawing set PDF into individual page PDFs. Mirrors what spec-splitter does for specifications.

Pipeline Position

Run after `/project-setup` identifies bound drawing sets. Produces split PDFs and `sheet_index.yaml` consumed by `/schedule-extractor` and all drawing analysis skills.

This is valuable for:

  • **Project teams**: Navigate drawings by sheet number instead of scrolling a multi-page PDF
  • **Other skills**: `sheet-index-builder`, `drawing-reader`, and all drawing analysis skills work better with individual sheet files
  • **AgentCM**: Split files become the basis for per-sheet structured data

Workflow

Sheet Split Progress:
- [ ] Step 1: Check if drawings are already split
- [ ] Step 2: Locate the bound drawing set
- [ ] Step 3: Split into individual page PDFs
- [ ] Step 4: Extract sheet numbers from title blocks
- [ ] Step 5: Rename files with sheet number + title
- [ ] Step 6: Update project context
- [ ] Step 7: Write graph entry (AgentCM only)

Step 1: Check if Drawings Are Already Split

Look for individual sheet PDFs. Drawings are already split if:

  • **AgentCM**: `.construction/index/sheet_index.yaml` exists with individual sheet entries and file paths point to split PDFs
  • Multiple PDFs exist with sheet number patterns in filenames (e.g., `A-1.1 - FLOOR PLAN.pdf`)
  • A `sheet_index.yaml` exists in the drawings directory

If already split, report the count and skip. If AgentCM has the sheet index but files haven't been physically split on disk, offer to split using the existing metadata for naming.

Step 2: Find ALL Drawing PDFs

Search the project directory for ALL PDFs that are drawings. Many projects have multiple drawing PDFs:

  • **Multi-part sets**: Part1.pdf, Part2.pdf, Part3.pdf (split by file size)
  • **Discipline sets**: Architectural.pdf, Civil.pdf, Electrical.pdf, Mechanical.pdf
  • **Single combined**: one large PDF with all sheets

Search in:

  • Folders named `drawings/`, `plans/`, `01 - Drawings/`, or similar (case-insensitive)
  • The project root (some projects have no folder structure)
  • Look for PDFs > 2MB with keywords: "plan", "drawing", "bid set", "dwg", discipline names

Process EACH PDF found. All split pages go to the same `sheets/` output directory.

If the user specifies a single file (`/sheet-splitter path/to/specific.pdf`), process only that file.

Step 3: Split Pages

Run the split script on each drawing PDF found:

${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/scripts/split_drawing_set.py \
  "{drawing_set.pdf}" \
  --output-dir "{drawings_directory}/sheets"

The script splits each page into its own PDF: `page_001.pdf`, `page_002.pdf`, etc. It does NOT attempt to read sheet numbers — that's unreliable across different title block formats.

Step 4: Identify Sheets via Vision

After splitting, read each page to identify sheet numbers and titles:

1. Rasterize the title block region of each page:

${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/../../scripts/pdf/rasterize_page.py page_NNN.pdf 1 --dpi 200 --output tb.png

2. Use vision on the rasterized title block: "Read the title block on this construction drawing. What is the sheet number and sheet title?"

3. Rename the file: `page_001.pdf` → `A-1.1 - FLOOR PLAN.pdf`

4. Update `sheet_index.yaml` with the identified sheet number, title, and discipline.

**Title blocks vary significantly across firms** — they can be on the east side, south side, or bottom-center. Some use VA standard forms, some use firm-specific formats. Vision handles all these variations.

Step 5: Write Sheet Index

After identifying all sheets, write `.construction/index/sheet_index.yaml`.

Output

sheets/
  A-1.1 - FLOOR PLAN.pdf         ← renamed by Claude via vision
  A-2.1 - ELEVATIONS.pdf
  S-1.1 - FOUNDATION PLAN.pdf
  page_006.pdf                    ← could not read title block
  ...
  sheet_index.yaml

Step 6: Update Project Context

After splitting and identifying, update `.construction/project_context.yaml` with:

  • `documents.drawing_count`: number of sheets
  • `documents.disciplines`: list of unique discipline prefixes found

Step 7: Write Graph Entry (AgentCM only)

If `.construction/` directory exists, write a graph entry:

${CLAUDE_SKILL_DIR}/../../bin/construction-python ${CLAUDE_SKILL_DIR}/../../scripts/graph/write_finding.py \
  --type "drawings_split" \
  --title "Drawing set split: {N} sheets from {source_pdf}" \
  --data '{"sheet_count": N, "source_pdf": "...", "identified_count": M, "unidentified_count": K, "disciplines": ["A","S","M","E"]}'

If no `.construction/` directory exists, skip — the `sheet_index.yaml` serves as the local record.

Multi-Set Projects

When a project has multiple drawing set PDFs (e.g., Architectural, MEP, Civil as separate files), use the source PDF name as a subdirectory to avoid filename collisions:

sheets/
  Architectural_Bid_Set/
    page_001.pdf ... page_050.pdf
  MEP_Bid_Set/
    page_001.pdf ... page_030.pdf
  sheet_index.yaml  ← merged from all sets

Pass `--output-dir "{drawings_directory}/sheets/{source_pdf_stem}"` to the split script for each set. The `sheet_index.yaml` merge logic combines entries from all subdirectories into a single index.

Report to user: number of pages split, how many identified via vision, output location.

File Safety

Never overwrite existing split sheet PDFs. If `sheets/` directory already contains files, check for conflicts before writing. The `sheet_index.yaml` merge uses additive logic — existing entries are

Read more
Ships withclaude-code-construction

Open-source skills that give Claude Code the working knowledge of a Project Engineer. Split drawings, parse specs, tabulate bids, generate subcontracts, and more — directly from your terminal or IDE.

Get the whole plugin
Stats
38
Stars
11
Forks
Maintained
Maintenance
Python
Language
MIT
License
5mo ago
Last commit
5mo ago
Created

Repo: dleerdefi/claude-code-construction

Other skills on claude-code-construction.