视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
architectural-drawing-parser【文档与办公】Parse architectural drawings, floor plans, and building code compliance documents using Vision AI. Extracts building type, occupancy, floor areas, room layouts, dimensions, and code parameters. Use when: reading PDF floor plans, analyzing architectural drawings, extracting building data from images or scanned documents.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Vision AI pipeline to extract structured building data from architectural drawings, floor plans, and IBC/IRC code compliance documents. Uses Claude's vision capabilities to read and interpret professional drawings, returning a normalized JSON object suitable for downstream 3D modeling or code validation workflows.
Supports IBC occupancy types (A-1 through U), construction types (I-A through V-B), sprinkler systems (NFPA 13/13R/13D), building dimensions, unit breakdowns, egress data, and floor plan elements (rooms, walls, doors, windows).
| Drawing Type | What Is Extracted |
|---|---|
| IBC/IRC code compliance drawings | Occupancy, construction type, heights, stories, areas, egress, units |
| Floor plans (unit-level) | Rooms, dimensions, wall layouts, door/window positions |
| Site plans | Building footprint, setbacks, parking |
| Building area analysis tables | Unit types, SF per unit, occupant loads, travel distances |
The parser returns a BuildingData JSON object with these fields:
{ permitted, actual }{ permitted: { feet, meters }, actual: { feet, meters } }{ sqft, sqm }{ name, area: { sqft, sqm }, occupantLoad, loadFactor, count }{ floor, maximum: { feet, meters } }1/16" = 1'-0"){ name, type, estimatedArea, dimensions } (floor plans only)import anthropic, base64, json, pathlib
client = anthropic.Anthropic() # reads ANTHROPIC_API_KEY from the environment
page = base64.standard_b64encode(pathlib.Path("A-101-level-1.jpg").read_bytes()).decode()
message = client.messages.create(
model="claude-opus-5-5", # any current vision-capable Claude model
max_tokens=4096,
messages=[{"role": "user", "content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": page}},
{"type": "text", "text": "Extract occupancy, constructionType, sprinklerSystem, stories, height, "
"totalBuildingArea, units, travelDistances, scale and rooms from this drawing. Give areas in sqft and sqm, "
"distances in feet and meters. Use null for anything not shown. Reply with one JSON object only."},
]}],
)
building = json.loads(message.content[0].text)
For a whole PDF set, send it as a document block (base64 or a Files API file_id) instead of an image; the API takes up to 32 MB and 100 pages per request on 200k-context models (600 on 1M-context models). Per image, the limits are 10 MB and 8000x8000 px, and images are downscaled to a 1568 px long edge on standard models (2576 px on Claude 4.7 and later), so tiny dimension text on a large sheet can be lost.
pdftoppm -png -r 200 -f 3 -l 3 drawing.pdf sheet)A developer receives a scanned floor plan of a 2-bedroom apartment unit and needs room dimensions for a renovation estimate.
Input: apartment_unit_plan.jpg (scanned at 200 DPI, 1/4" = 1'-0" scale)
Extracted JSON:
{
"rooms": [
{ "name": "Living Room", "type": "living", "estimatedArea": { "sqft": 240, "sqm": 22.3 }, "dimensions": { "width": 16, "depth": 15, "units": "feet" } },
{ "name": "Kitchen", "type": "kitchen", "estimatedArea": { "sqft": 120, "sqm": 11.1 }, "dimensions": { "width": 12, "depth": 10, "units": "feet" } },
{ "name": "Master Bedroom", "type": "bedroom", "estimatedArea": { "sqft": 168, "sqm": 15.6 }, "dimensions": { "width": 14, "depth": 12, "units": "feet" } },
{ "name": "Bedroom 2", "type": "bedroom", "estimatedArea": { "sqft": 132, "sqm": 12.3 }, "dimensions": { "width": 12, "depth": 11, "units": "feet" } },
{ "name": "Bathroom", "type": "bathroom", "estimatedArea": { "sqft": 48, "sqm": 4.5 }, "dimensions": { "width": 8, "depth": 6, "units": "feet" } }
],
"scale": "1/4\" = 1'-0\""
}
The developer uses the room dimensions to calculate material quantities for flooring (708 sqft total) and wall paint coverage.
An architect submits a code compliance sheet for a 3-story apartment building. The parser extracts all building classification and egress data.
Input: ibc_compliance_sheet.jpg (building area analysis table + egress diagram)
Extracted JSON:
{
"occupancy": "R-2",
"constructionType": "V-B",
"sprinklerSystem": "NFPA 13",
"stories": { "permitted": 4, "actual": 3 },
"height": {
"permitted": { "feet": 60, "meters": 18.29 },
"actual": { "feet": 35, "meters": 10.67 }
},
"totalBuildingArea": { "sqft": 8910, "sqm": 827.9 },
"units": [
{ "name": "Type A", "area": { "sqft": 834, "sqm": 77.5 }, "occupantLoad": 5, "loadFactor": "1/200 SF", "count": 6 },
{ "name": "Type B", "area": { "sqft": 645, "sqm": 59.9 }, "occupantLoad": 4, "loadFactor": "1/200 SF", "count": 6 }
],
"travelDistances": [
{ "floor": "Level 1", "maximum": { "feet": 66, "meters": 20.1 } },
{ "floor": "Level 2", "maximum": { "feet": 66, "meters": 20.1 } },
{ "floor": "Level 3", "maximum": { "feet": 66, "meters": 20.1 } }
]
}
This data feeds into the ibc-building-codes skill for compliance validation and the spec-to-3d skill for 3D model generation.