Skip to content
winterwekenPublic

About

Design Tech Toolbox

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

44 Commits

Folders and files

Repository files navigation

⬡ makit

A multi-tool CLI & TUI for AEC workflows — orchestrate Revit, Blender, IFC analysis, and MURB energy modelling from one terminal.

╔══════════════════════════════════════════════════╗
║            makit canvas demo (rsille)            ║
╚══════════════════════════════════════════════════╝

▸ Isometric building:
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣄⡀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⠤⠒⣉⠤⡧⢌⣑⣢
⠀⠀⠀⠀⠀⠀⢸⣛⣛⣤⡶⠷⢮⣭⣽
⠀⠀⠀⠀⠀⠀⠸⣿⣉⠒⡗⢊⣡⡼⠟
⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠟⠋⠁⠀⠀

▸ Floor plan:
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠜⡟⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⡖⠒⠒⠒⠒⠒⠒⠒⠒⡖⠒⠒⠒⠒⠒⠒⠒⠒⡆⠀⠀⠀
⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀
⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡆⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀
⠀⡗⠒⠒⠒⠒⠒⠒⠒⠒⡗⠒⠒⠒⠒⠒⠒⠒⠂⡇⣐⣤⡀
⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠐⠉⠀
⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀
⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀
⠀⠓⠒⠒⠒⠒⠒⠒⠒⠒⠓⠒⠒⠒⠒⠒⠒⠒⠒⠃⠀⠀⠀

▸ Energy (heating demand):
⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⡇⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⡇⣿⣇⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣶⠀⠀
⡇⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣶⣾⣿⠀⠀
⡇⣿⣿⣿⣶⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⠀⠀
⡇⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⢰⣶⣿⣿⣿⠀⠀
⡇⣿⣿⣿⣿⣷⣶⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⠀⠀
⡇⣿⣿⣿⣿⣿⣿⣤⡄⠀⠀⠀⠀⣶⣾⣿⣿⣿⣿⠀⠀
⣇⣿⣿⣿⣿⣿⣿⣿⣷⣶⣤⣴⣶⣿⣿⣿⣿⣿⣿⣀⡀
 J  F  M  A  M  J  J  A  S  O  N  D

Built in Rust with rsille for braille-rendered terminal graphics. Makit bridges the gap between BIM authoring tools and programmatic analysis — connect to live applications, extract building geometry, run cross-platform analytics, simulate energy performance, and visualize results, all without leaving the terminal.

Features

Feature Description
Interactive TUI Tree explorer with real-time braille canvas preview and responsive layout
Live Revit Bridge Extract walls, floors, rooms via pyRevit HTTP; run orientation & WWR analysis
IFC Analysis Standalone wall orientation and Window-to-Wall Ratio analysis (no Revit required)
Blender Sync Receive live geometry from Blender over HTTP for TUI visualization
MURB Energy Monthly heat balance simulation — TEDI / TEUI / GHGI analysis via Python bridge
Braille Canvas Floor plans, elevations, bar charts, and data sheets in braille characters
3D Logo Animated rotating hexagonal wireframe on the TUI home screen
Generic JSON Format Extract from any source into one schema, run the same analysis everywhere

Quick Start

Build from Source

git clone https://github.com/winterweken/makit.git
cd makit
cargo build --release

Launch the TUI

cargo run -p makit -- tui
# or just:
cargo run -p makit
Key Action
↑ ↓ Navigate the tree
→ ← Expand / collapse
Enter Open / execute
Tab Switch pane focus
? Toggle help overlay
Esc Quit

CLI Commands

# List all registered tools, sources, and actions
makit list

# Execute a specific action
makit exec revit analysis revit-wall-orientations

# Analyze an IFC file
makit analyze examples/IFC/Building-Architecture.ifc

# Show help
makit --help

Canvas Demo

cargo run -p makit --example canvas_demo

Renders braille-character shapes, a floor plan with interior walls, and filled rectangles — straight in the terminal.


Architecture

graph LR
    subgraph CLI["makit-cli"]
        list["list"]
        exec["exec"]
        analyze["analyze"]
        tui["tui"]
    end

    subgraph Core["makit-core"]
        registry["Registry"]
        config["Config"]
    end

    subgraph Tools["makit-tools"]
        revit["Revit Bridge"]
        blender["Blender Sync"]
        ifc["IFC Parser"]
        murb["MURB Energy"]
        model["Building Model"]
    end

    subgraph Geometry["makit-geometry"]
        types["Primitives"]
        drawing["Braille Drawing"]
        sdf["SDF Engine"]
    end

    subgraph TUI["makit-tui"]
        app["Elm App"]
        theme["Theme"]
        tree_data["Tree Data"]
    end

    CLI --> Core
    CLI --> Tools
    CLI --> TUI
    TUI --> Tools
    TUI --> Geometry
    Tools --> Core

    style CLI fill:#161b22,stroke:#00d4aa,color:#c9d1d9
    style Core fill:#161b22,stroke:#58a6ff,color:#c9d1d9
    style Tools fill:#161b22,stroke:#f78166,color:#c9d1d9
    style Geometry fill:#161b22,stroke:#d2a8ff,color:#c9d1d9
    style TUI fill:#161b22,stroke:#7ee787,color:#c9d1d9
Loading

Workspace Layout

makit/
├── crates/
│   ├── makit-cli/           # Binary — clap CLI (list, exec, analyze, tui, status, init)
│   ├── makit-core/          # Registry singleton, config (figment/YAML), model types
│   ├── makit-geometry/      # Point, Line, Rectangle, Room, Floor + braille drawing + SDF
│   ├── makit-tools/         # Tool implementations (revit, blender, ifc, murb)
│   └── makit-tui/           # rsille-native TUI (tree explorer, canvas viz, theme)
├── pyrevit-extension/       # Python pyRevit extension (runs inside Revit)
├── scripts/
│   ├── blender/             # Python Blender addon
│   └── murb_runner.py       # Python bridge for MURB energy tool
├── examples/IFC/            # Sample IFC files and analysis scripts
└── docs/                    # Architecture documentation

Tool Registry

Tools register sources (geometry input drivers) and actions (operations) at startup:

SourceDescription
revitAutodesk Revit via pyRevit HTTP bridge (port 48884)
blenderBlender live geometry sync (axum server)
ifcIFC file loader + IfcOpenShell extraction
murbMURB energy modelling (Python subprocess)
rhinoRhino 3D / Grasshopper integration
ActionCategoryDescription
revit-extract-wallsextractionExtract wall elements from Revit
revit-wall-orientationsanalysisWall orientation + WWR analysis
murb-simulateanalysisMonthly energy simulation
murb-reportreportingTEDI / TEUI / GHGI report
architect-render-demorenderingArchitectural demo rendering
12 actions total — run makit list to see all

Key Dependencies

Crate Purpose
rsille v3 Braille canvas, TUI widgets, terminal rendering
clap 4 CLI argument parsing
figment Config management (YAML + env)
reqwest HTTP client for pyRevit bridge
axum HTTP server for Blender sync
tokio Async runtime

Development

# Build
cargo build

# Run all 50 tests (5 registry, 18 geometry, 27 tools)
cargo test

# Run the CLI
cargo run -p makit -- --help

# Run the TUI
cargo run -p makit -- tui

# Run the canvas demo
cargo run -p makit --example canvas_demo

# Format & lint
cargo fmt
cargo clippy

TUI Architecture

The TUI follows the Elm architecture pattern:

State → view(state) → Widget tree → terminal render
  ↑                                       |
  └──── update(state, msg) ← user input ──┘
  • State — app data (active node, logo angle, analysis results, terminal width)
  • Msg — discrete events (TreeFocused, TreeOpened, Tick, IfcFileSelected)
  • update — pure reducer mapping state × message → new state
  • view — pure function mapping state → widget tree

License

MIT

About

Design Tech Toolbox

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages