skills/spec-to-3d/SKILL.md
Generate 3D building models from architectural specifications, parsed drawings, or building code data. Outputs Three.js geometry, Pascal Editor JSON, or plain JSON for IFC conversion. Use when: converting floor plans to 3D, building spec-driven 3D models, generating architectural visualizations from structured data.
npx skillsauth add tusosos/manus-knowledge-base spec-to-3dInstall 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.
Convert structured architectural data (from architectural-drawing-parser or manual specs) into 3D building models. Supports three output formats: Three.js (interactive web viewer), Pascal Editor JSON (BIM-style node graph), and plain JSON (for IFC/GLB conversion). Works as the final stage in a drawing-to-3D pipeline alongside architectural-drawing-parser and ibc-building-codes.
Architectural Drawing (image/PDF)
| architectural-drawing-parser
Structured BuildingData JSON
| ibc-building-codes (validation)
Validated Building Data
| spec-to-3d (THIS SKILL)
3D Model Output:
- Three.js Group (web viewer)
- Pascal Editor JSON (BIM node graph)
- Building3D JSON (for IFC/GLB export)
The generator expects a BuildingData object with:
{ permitted, actual } (number of floors){ name, area: { sqft, sqm }, occupantLoad } (unit types per floor){ permitted, actual } in feet and meters| Format | Use Case | Description |
|---|---|---|
| json (Building3D) | IFC conversion, custom renderers | Plain data: levels, units, rooms, walls, openings |
| pascal (Pascal Editor) | BIM workflows | Node graph with site > building > level > wall/room hierarchy |
| threejs (THREE.Group) | Web-based 3D viewer | Mesh geometry with materials for floors, walls, windows |
interface Building3D {
levels: Level3D[];
totalHeight: number; // meters
footprintWidth: number;
footprintDepth: number;
}
interface Level3D {
elevation: number; // meters above grade
height: number; // floor-to-floor in meters
units: Unit3D[];
corridors: Box3D[];
stairs: Stair3D[];
}
interface Unit3D {
type: string;
position: { x: number; y: number; z: number };
width: number; depth: number; height: number; // meters
rooms: Room3D[];
walls: Wall3D[];
openings: Opening3D[];
}
A developer has parsed data from an IBC compliance sheet for a 3-story R-2 apartment building and wants to generate a 3D model for visualization.
Input BuildingData:
occupancy: R-2, constructionType: V-B, sprinklerSystem: NFPA 13
stories: { permitted: 4, actual: 3 }
units:
- Type A: 834 SF (77.5 sqm), 5 occupants
- Type B: 645 SF (59.9 sqm), 4 occupants
Generated Building3D (format: "json"):
Level 0 (Ground Floor): elevation 0.00m, height 2.74m
Type A: 7.19m wide x 10.78m deep (2-bedroom layout: living, kitchen, master bed, bed 2, 2 baths)
Type B: 6.32m wide x 9.48m deep (1-bedroom layout: living, kitchen, bedroom, bath)
Corridor: full building width x 1.52m deep
2 stairwells at building ends
Level 1: elevation 2.74m, height 2.74m (same layout)
Level 2: elevation 5.49m, height 2.74m (same layout, no stairs above)
Total height: 8.23m
Footprint: ~13.66m x 10.78m
Wall count: 12 exterior + 8 interior per floor
Openings: 1 door + 2 windows per unit
An architect needs to export the building data for use in an IFC/BIM workflow. They generate Pascal Editor JSON that maps to a site > building > level > element hierarchy.
Input: Same 3-story R-2 building as Example 1
Output format: "pascal"
Generated Pascal Editor JSON:
{
"nodes": {
"site_1700000000": { "type": "site", "parentId": null },
"building_1700000000": { "type": "building", "parentId": "site_...", "width": 13.66, "depth": 10.78, "height": 8.23 },
"level_0": { "type": "level", "name": "Ground Floor", "elevation": 0.00, "height": 2.74 },
"level_1": { "type": "level", "name": "Level 1", "elevation": 2.74, "height": 2.74 },
"level_2": { "type": "level", "name": "Level 2", "elevation": 5.49, "height": 2.74 },
"wall_0_0": { "type": "wall", "parentId": "level_0", "start": { "x": 0, "y": 0 }, "end": { "x": 7.19, "y": 0 }, "thickness": 0.30, "isExterior": true },
"room_0_0": { "type": "room", "parentId": "level_0", "name": "Living Room", "roomType": "living", "width": 4.31, "depth": 4.31 },
... (60+ nodes total across 3 levels)
},
"rootNodeIds": ["site_1700000000"]
}
This JSON imports directly into Pascal Editor or can be converted to IFC using ifcopenshell.
architectural-drawing-parser room extraction for actual positions from drawingstools
Download video and audio from YouTube and other platforms with yt-dlp. Use when a user asks to download YouTube videos, extract audio from videos, download playlists, get subtitles, download specific formats or qualities, batch download, archive channels, extract metadata, embed thumbnails, download from social media platforms (Twitter, Instagram, TikTok), or build media ingestion pipelines. Covers format selection, audio extraction, playlists, subtitles, metadata, and automation.
development
Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.
development
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
development
Use when you have a spec or requirements for a multi-step task, before touching code